2016-02-25 13 views

risposta

6

Dobbiamo solo raggruppare sulla base di 2 tasti e selezionare gli elementi con un numero maggiore di 1, per trovare i duplicati.

Query: - sarà come

db.mycollection.aggregate(
    { $group: { 
     _id: { foreing: "$foreing", value: "$value" }, 
     count: { $sum: 1 }, 
     docs: { $push: "$_id" } 
    }}, 
    { $match: { 
     count: { $gt : 1 } 
    }} 
) 

USCITA: - sarà come

{ 
    "result" : [ 
     { 
      "_id" : { 
       "foreing" : 1, 
       "value" : 2 
      }, 
      "count" : 2, 
      "docs" : [ 
       ObjectId("34567887654345678987"), 
       ObjectId("34567887654345678987") 
      ] 
     } 
    ], 
    "ok" : 1 
} 

Riferimento Link: - How to find mongo documents with a same field

9

Si può facilmente identificare i duplicati da esegue la seguente operazione di pipeline di aggregazione:

db.collection.aggregate([ 
    { 
     "$group": { 
      "_id": { "foreing": "$foreing", "value": "$value" }, 
      "uniqueIds": { "$addToSet": "$_id" }, 
      "count": { "$sum": 1 } 
     } 
    }, 
    { "$match": { "count": { "$gt": 1 } } } 
]) 

Il $group operatore nel primo passo viene utilizzato per raggruppare i documenti dai valori chiave foreign e value e quindi creare una matrice di _id valori per ciascuno dei documenti raggruppati come campo uniqueIds utilizzando la $addToSet operatore. Questo ti dà una serie di valori di espressione univoci per ogni gruppo. Ottieni il numero totale di documenti raggruppati da utilizzare nelle fasi successive della pipeline con l'operatore $sum.

Nel secondo stadio della pipeline, utilizzare l'operatore $match per filtrare tutti i documenti con un conteggio di 1. I documenti filtrati-out rappresentano chiavi di indice univoche.

I restanti documenti saranno quelli della raccolta che hanno valori chiave duplicati per la coppia foreing & value.

Problemi correlati