MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Remover registros duplicados do mongodb 4.0


Você pode agrupar registros duplicados usando o pipeline de agregação:
db.theCollection.aggregate([
   {$group: {_id: {item: "$item", qty: "$qty", size: "$size", status: "$status"}}},
   {$project: {_id: 0, item: "$_id.item", qty: "$_id.qty", size: "$_id.size", status: "$_id.status"}},
   {$out: "theCollectionWithoutDuplicates"}
])

Após a execução do pipeline de agregação, o theCollectionWithoutDuplicates coleção contém um documento para cada grupo de documentos duplicados originais, com um novo _id - você pode verificar a saída, removendo a coleção original (db.theCollection.drop() ) e renomeie a nova coleção (db.theCollectionWithoutDuplicates.renameCollection('theCollection') ). Soltar e renomear podem ser combinados em db.theCollectionWithoutDuplicates.renameCollection('theCollection', true) .

EXPLICAÇÃO do uso do pipeline de agregação:
  1. db.theCollection.aggregate([]) executa um pipeline de agregação, recebendo uma lista de estágios de agregação a serem executados
  2. o $group documentos de grupos de estágio por campos especificados como _id subsequente campo
  3. o $project o estágio altera os nomes dos campos, nivelando _id aninhado subdocumentos produzidos por $group
  4. o $out stage armazena os documentos resultantes da agregação em uma determinada coleção