MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak dołączyć wyniki agregacji Mongo DB do istniejącej kolekcji?

Uruchamianie Mongo 4.2 , nowy $merge operator agregacji (podobny do $out ) umożliwia scalanie wynik potoku agregacji do określonej kolekcji:

Biorąc pod uwagę te dane wejściowe:

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 etap agregacji może być użyty w następujący sposób:

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

do produkcji:

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

Zauważ, że $merge operator ma wiele opcji aby określić, jak scalić wstawione rekordy sprzeczne z istniejącymi rekordami.

W tym przypadku (z domyślnymi opcjami):

  • zachowuje istniejące dokumenty kolekcji docelowej (tak jest w przypadku { "_id": "id_2", "a": 54 } )

  • wstawia dokumenty z wyjścia potoku agregacji do kolekcji docelowej, gdy jeszcze ich nie ma (na podstawie _id - tak jest w przypadku { "_id" : "id_3", "a" : 38 } )

  • zastępuje rekordy kolekcji docelowej, gdy potok agregacji tworzy dokumenty istniejące w kolekcji docelowej (na podstawie _id - tak jest w przypadku { "_id": "id_1", "a": 12 } zastąpione przez { "_id" : "id_1", "a" : 34 } )



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tworzenie nowych kolekcji Meteor w locie

  2. mongodb część obiektu najprawdopodobniej będzie wyjątkowa

  3. Jak mogę zaimplementować uprawnienia na poziomie pola dla MongoDB?

  4. mongodb liczy grupy i podgrupy

  5. Parsowanie długiego ciągu zapytania bezpośrednio do MongoDB (tak jak w SQL)