sql >> Database >  >> NoSQL >> MongoDB

Hoe voeg ik Mongo DB-aggregatieresultaten toe aan een bestaande verzameling?

Vanaf Mongo 4.2 , de nieuwe $merge aggregatie-operator (vergelijkbaar met $out ) staat samenvoegen toe het resultaat van een aggregatiepijplijn in de opgegeven verzameling:

Gezien deze invoer:

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

de $merge aggregatiefase kan als zodanig worden gebruikt:

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

produceren:

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

Merk op dat de $merge operator wordt geleverd met veel opties om te specificeren hoe ingevoegde records moeten worden samengevoegd die conflicteren met bestaande records.

In dit geval (met de standaard opties), dit:

  • behoudt de bestaande documenten van de doelverzameling (dit is het geval van { "_id": "id_2", "a": 54 } )

  • voegt documenten uit de uitvoer van de aggregatiepijplijn in de doelverzameling in wanneer ze nog niet aanwezig zijn (op basis van de _id - dit is het geval voor { "_id" : "id_3", "a" : 38 } )

  • vervangt de records van de doelverzameling wanneer de aggregatiepijplijn documenten produceert die in de doelverzameling aanwezig zijn (op basis van de _id - dit is het geval voor { "_id": "id_1", "a": 12 } vervangen door { "_id" : "id_1", "a" : 34 } )



  1. Hoe voeg je dezelfde datum in mongodb in als gelezen uit String via Java?

  2. Networkx is nooit klaar met het berekenen van Betweenness centrality voor 2 mil nodes

  3. Is het mogelijk om één resultaat in totaal te krijgen?

  4. Mongoid verwijdert veel met limiet