sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur lägger jag till Mongo DB-aggregationsresultat till en befintlig samling?

Startar Mongo 4.2 , den nya $merge aggregeringsoperator (liknande $out ) tillåter sammanslagning resultatet av en aggregeringspipeline till den angivna samlingen:

Med tanke på denna input:

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 }
])

$merge aggregeringsstadiet kan användas som sådant:

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

att producera:

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

Observera att $merge operatör kommer med många alternativ för att ange hur man slår samman infogade poster som är i konflikt med befintliga poster.

I det här fallet (med standardalternativen), detta:

  • behåller målsamlingens befintliga dokument (detta är fallet med { "_id": "id_2", "a": 54 } )

  • infogar dokument från utdata från aggregeringspipelinen i målsamlingen när de inte redan finns (baserat på _id - detta är fallet med { "_id" : "id_3", "a" : 38 } )

  • ersätter målsamlingens poster när aggregeringspipelinen producerar dokument som finns i målsamlingen (baserat på _id - detta är fallet med { "_id": "id_1", "a": 12 } ersatt av { "_id" : "id_1", "a" : 34 } )



  1. Massuppdatering av dokument i MongoDB

  2. Kan inte autentisera till mongo, autentisering misslyckas

  3. Ändra alla mina dokument kapslade dokumentvärde

  4. Laddar inledande data vid applikationsstart med Spring Data MongoDB