MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie füge ich Mongo DB-Aggregationsergebnisse an eine vorhandene Sammlung an?

Starten von Mongo 4.2 , der neue $merge Aggregationsoperator (ähnlich $out ) ermöglicht das Zusammenführen das Ergebnis einer Aggregationspipeline in die angegebene Sammlung:

Angesichts dieser Eingabe:

db.source.insert([
  { "_id": "id_1", "a": 34 },
  { "_id": "id_3", "a": 38 },
  { "_id": "id_4", "a": 54 }
])
db.target.insert([
  { "_id": "id_1", "a": 12 },
  { "_id": "id_2", "a": 54 }
])

das $merge Aggregationsstufe kann als solche verwendet werden:

db.source.aggregate([
  // { $whatever aggregation stage, for this example, we just keep records as is }
  { $merge: { into: "target" } }
])

zu produzieren:

// > db.target.find()
{ "_id" : "id_1", "a" : 34 }
{ "_id" : "id_2", "a" : 54 }
{ "_id" : "id_3", "a" : 38 }
{ "_id" : "id_4", "a" : 54 }

Beachten Sie, dass $merge operator kommt mit vielen Optionen um anzugeben, wie eingefügte Datensätze, die mit bestehenden Datensätzen in Konflikt stehen, zusammengeführt werden.

In diesem Fall (mit den Standardoptionen) dies:

  • behält die vorhandenen Dokumente der Zielsammlung bei (dies ist der Fall bei { "_id": "id_2", "a": 54 } )

  • fügt Dokumente aus der Ausgabe der Aggregationspipeline in die Zielsammlung ein, wenn sie noch nicht vorhanden sind (basierend auf der _id - Dies ist der Fall bei { "_id" : "id_3", "a" : 38 } )

  • ersetzt die Datensätze der Zielsammlung, wenn die Aggregationspipeline Dokumente erzeugt, die in der Zielsammlung vorhanden sind (basierend auf der _id - Dies ist der Fall bei { "_id": "id_1", "a": 12 } ersetzt durch { "_id" : "id_1", "a" : 34 } )