Duplikáty můžete snadno identifikovat spuštěním následující operace agregačního kanálu:
db.collection.aggregate([
{
"$group": {
"_id": { "foreing": "$foreing", "value": "$value" },
"uniqueIds": { "$addToSet": "$_id" },
"count": { "$sum": 1 }
}
},
{ "$match": { "count": { "$gt": 1 } } }
])
$group
operátor v prvním kroku se používá k seskupení dokumentů podle foreign
a value
hodnoty klíče a poté vytvořte pole _id
hodnoty pro každý ze seskupených dokumentů jako uniqueIds
pomocí $addToSet
operátor. Získáte tak řadu jedinečných hodnot výrazů pro každou skupinu. Získejte celkový počet seskupených dokumentů pro použití v pozdějších fázích kanálu pomocí $sum
operátor.
Ve druhé fázi kanálu použijte $match
operátor pro odfiltrování všech dokumentů s počtem 1. Odfiltrované dokumenty představují jedinečné indexové klíče.
Zbývající dokumenty budou ty v kolekci, které mají duplicitní hodnoty klíče pro pár foreing
&value
.