sql >> Databáze >  >> NoSQL >> MongoDB

Jak připojím výsledky agregace Mongo DB k existující kolekci?

Spouští se Mongo 4.2 , nový $merge agregační operátor (podobný $out ) umožňuje slučování výsledek agregačního kanálu do zadané kolekce:

Vzhledem k tomuto vstupu:

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 agregační fázi lze použít jako takovou:

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

vyrobit:

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

Všimněte si, že $merge operátor přichází s mnoho možností určit, jak sloučit vložené záznamy kolidující s existujícími záznamy.

V tomto případě (s výchozími možnostmi) toto:

  • uchovává stávající dokumenty cílové kolekce (toto je případ { "_id": "id_2", "a": 54 } )

  • vloží dokumenty z výstupu agregačního kanálu do cílové kolekce, pokud ještě nejsou přítomny (na základě _id - toto je případ { "_id" : "id_3", "a" : 38 } )

  • nahradí záznamy cílové kolekce, když agregační kanál vytvoří dokumenty existující v cílové kolekci (na základě _id - toto je případ { "_id": "id_1", "a": 12 } nahrazeno { "_id" : "id_1", "a" : 34 } )



  1. Redis vs MongoDB

  2. Pracovní jednotka v mongodb a C#

  3. Jaký je rozdíl mezi mongoose a mongoJS? Které mám použít?

  4. Jak implementovat značky příspěvků v Mongo?