Wie kann ich anfügen, Mongo DB aggregation der Ergebnisse zu einer bestehenden Sammlung?
Ich versuche mehrere Insertionen auf ein existierendes Mongo-DB-Sammlung mit dem folgenden code
db.dados_meteo.aggregate( [
{ $match : { "POM" : "AguiardaBeira" } },
{ $project : {
_id : { $concat: [
"0001:",
{ $substr: [ "$DTM", 0, 4 ] },
{ $substr: [ "$DTM", 5, 2 ] },
{ $substr: [ "$DTM", 8, 2 ] },
{ $substr: [ "$DTM", 11, 2 ] },
{ $substr: [ "$DTM", 14, 2 ] },
{ $substr: [ "$DTM", 17, 2 ] }
] },
"RNF" : 1, "WET":1,"HMD":1,"TMP":1 } },
{ $out : "dados_meteo_reloaded" }
] )
Aber jedes mal, wenn ich die $match-Parameter und stellen Sie eine neue aggregation, Mongo DB löscht die bisherigen Dokumente und fügt die neuen Ergebnis.
Könnten Sie mir helfen?
- Möglich, Duplikat der Wie zu aggregieren, Zusammenführen und das Ergebnis in eine collection?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die kurze Antwort ist: "Sie können nicht":
Als Problemumgehung können Sie die Kopie der Sammlung angegebene Dokument
$out
zu einer "ständigen" Sammlung nur nach der aggregation, die in einer mehrere Möglichkeiten (nicht die ist ideal, wenn):db.out.find().forEach(function(doc) {db.target.insert(doc)})
Ab
Mongo 4.2
die neue$merge
aggregation operator (ähnlich wie$out
) ermöglicht Zusammenführen das Ergebnis einer aggregation pipeline in der angegebenen Sammlung:Angesichts dieser input:
den
$merge
aggregation der Bühne kann als solches verwendet werden:produzieren:
Beachten Sie, dass die
$merge
Betreiber kommt mit viele Optionen um festzulegen, wie die Zusammenführung eingefügten Datensätze in Konflikt mit vorhandenen Datensätzen.In diesem Fall (mit den default-Optionen), diese:
hält die Ziel-Auflistung der vorhandenen Dokumente (dies ist der Fall von
{ "_id": "id_2", "a": 54 }
)fügt Dokumente aus der Ausgabe der aggregation pipeline in die Ziel-Sammlung, wenn Sie nicht bereits vorhanden (auf der Grundlage der
_id
- dies ist der Fall von{ "_id" : "id_3", "a" : 38 }
)ersetzt die Ziel-Auflistung der Datensätze, wenn die aggregation pipeline erzeugt Dokumente in die bestehenden Ziel-Auflistung (auf der Grundlage der
_id
- dies ist der Fall von{ "_id": "id_1", "a": 12 }
ersetzt durch{ "_id" : "id_1", "a" : 34 }
)Es ist nicht die schönste Sache überhaupt, aber als eine alternative syntax (von einem post-processing-Archiv/anfügen)...
JS:
Ich bin mir nicht sicher, wie diese stacks gegen die forEach-Variante, aber ich finde es intuitiver zu Lesen.