Ich möchte eine $ -Projektaggregationsphase definieren, in der ich sie anweisen kann, ein neues Feld hinzuzufügen und alle vorhandenen Felder einzuschließen, ohne alle vorhandenen Felder auflisten zu müssen.
Mein Dokument sieht so aus, mit vielen Feldern:
{
obj: {
obj_field1: "hi",
obj_field2: "hi2"
},
field1: "a",
field2: "b",
...
field26: "z"
}
Ich möchte eine Aggregationsoperation wie folgt durchführen:
[
{
$project: {
custom_field: "$obj.obj_field1",
//the next part is that I don't want to do
field1: 1,
field2: 1,
...
field26: 1
}
},
... //group, match, and whatever...
]
Gibt es so etwas wie ein Schlüsselwort "Alle Felder einschließen", das ich in diesem Fall verwenden kann, oder eine andere Möglichkeit, um zu vermeiden, dass jedes Feld separat aufgelistet werden muss?
mongodb
mongodb-query
aggregation-framework
samuelluis
quelle
quelle
Antworten:
In 4.2+ können Sie den
$set
Aggregationspipeline-Operator verwenden, der nichts anderes als ein$addFields
in 3.4 hinzugefügter Alias istquelle
$addFields
neu in MongoDB 3.4, das von der C # -Treiberversion 2.5+ unterstützt wirdIAggregateFluent<TResult>.AppendStage(new JsonPipelineStageDefinition<TInput, TOutput>("{ $addFields : { myField: 'myValue' }}")
Sie können $$ ROOT verwenden, um auf das Stammdokument zu verweisen. Behalten Sie alle Felder dieses Dokuments in einem Feld und versuchen Sie es danach abzurufen (abhängig von Ihrem Client-System: Java, C ++, ...)
quelle
document
Option zum Erstellen eines zusammengeführten Dokuments bezeichnet wird.custom_field
angehängten neu zu erstellen.const newObj = { ...result.document, custom_field: result.custom_field }
>>> Gibt es so etwas wie das Schlüsselwort "Alle Felder einschließen", das ich in diesem Fall oder in einer anderen Lösung verwenden kann?
Leider gibt es keinen Operator, der "alle Felder" in die Aggregationsoperation einbezieht. Der einzige Grund, warum, weil die Aggregation hauptsächlich erstellt wird, um Daten aus Sammlungsfeldern (Summe, Durchschnitt usw.) zu gruppieren / zu berechnen und alle Felder der Sammlung zurückzugeben, ist kein direkter Zweck.
quelle
posts
mit _id, title, body, liken Feldern. Das Likes-Feld ist ein Array von Benutzer-ID, denen der Beitrag gefällt. Wie können Sie alle Beiträge mit allen _id, title, body, likeCount auflisten? Die Rückgabe aller Felder ist in diesem Fall ein direkter Zweck.Ab Version 2.6.4 verfügt Mongo DB nicht über eine solche Funktion für die
$project
Aggregationspipeline. Aus den Dokumenten für$project
:und
quelle
Sie können Ihrem Dokument neue Felder hinzufügen
$addFields
aus docs
und für alle Felder in Ihrem Dokument können Sie verwenden
$$ROOT
quelle
Laut der Antwort von @Deka können Sie für den c # mongodb-Treiber 2.5 das gruppierte Dokument mit allen Schlüsseln wie unten erhalten.
quelle