sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo agrego los resultados de agregación de Mongo DB a una colección existente?

Iniciando Mongo 4.2 , el nuevo $merge operador de agregación (similar a $out ) permite combinar el resultado de una canalización de agregación en la colección especificada:

Dada esta entrada:

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

el $merge la etapa de agregación se puede utilizar como tal:

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

producir:

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

Tenga en cuenta que $merge El operador viene con muchas opciones para especificar cómo fusionar registros insertados en conflicto con registros existentes.

En este caso (con las opciones predeterminadas), esto:

  • mantiene los documentos existentes de la colección de destino (este es el caso de { "_id": "id_2", "a": 54 } )

  • inserta documentos de la salida de la canalización de agregación en la colección de destino cuando aún no están presentes (según el _id) - este es el caso de { "_id" : "id_3", "a" : 38 } )

  • reemplaza los registros de la colección de destino cuando la tubería de agregación produce documentos existentes en la colección de destino (basado en el _id - este es el caso de { "_id": "id_1", "a": 12 } reemplazado por { "_id" : "id_1", "a" : 34 } )