MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да добавя резултатите от агрегацията на Mongo DB към съществуваща колекция?

Стартиране на Mongo 4.2 , новият $merge оператор за агрегиране (подобен на $out ) позволява обединяване резултатът от конвейер за агрегиране в указаната колекция:

При този вход:

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 етапът на агрегиране може да се използва като такъв:

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

за производство:

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

Имайте предвид, че $merge оператор идва с много опции за да укажете как да обедините вмъкнати записи, които са в конфликт със съществуващи записи.

В този случай (с опциите по подразбиране), това:

  • запазва съществуващите документи на целевата колекция (това е случаят с { "_id": "id_2", "a": 54 } )

  • вмъква документи от изхода на тръбопровода за агрегиране в целевата колекция, когато те вече не присъстват (на базата на _id - това е случаят с { "_id" : "id_3", "a" : 38 } )

  • замества записите на целевата колекция, когато тръбопроводът за агрегиране произвежда документи, съществуващи в целевата колекция (на базата на _id - това е случаят с { "_id": "id_1", "a": 12 } заменено с { "_id" : "id_1", "a" : 34 } )



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB еквивалент на SQL COUNT GROUP BY

  2. сборната заявка на mongodb не връща правилната сума при използване на $sum

  3. mongolastic отнема много време за индексиране на колекция

  4. Мониторинг на база данни без агент с ClusterControl

  5. Всичко, което трябва да знаете за MongoDB Client