I have documents like this:
{ "_id" : ObjectId("557eaf444ba222d545c3dffc"), "foreing" : ObjectId("538726124ba2222c0c0248ae"), "value" : "test", } I want to find all documents which have duplicated values for pair foreing & value.
MongoDB provides the find() that is used to find multiple values or documents from the collection. The find() method returns a cursor of the result set and prints all the documents. To find the multiple values, we can use the aggregation operations that are provided by MongoDB itself.
You can easily identify the duplicates by running the following aggregation pipeline operation:
db.collection.aggregate([ { "$group": { "_id": { "foreing": "$foreing", "value": "$value" }, "uniqueIds": { "$addToSet": "$_id" }, "count": { "$sum": 1 } } }, { "$match": { "count": { "$gt": 1 } } } ]) The $group operator in the first step is used to group the documents by the foreign and value key values and then create an array of _id values for each of the grouped documents as the uniqueIds field using the $addToSet operator. This gives you an array of unique expression values for each group. Get the total number of grouped documents to use in the later pipeline stages with the $sum operator.
In the second pipeline stage, use the $match operator to filter out all documents with a count of 1. The filtered-out documents represent unique index keys.
The remaining documents will be those in the collection that have duplicate key values for pair foreing & value.
We only have to group on the bases of 2 keys, and select the elements with count greater than 1, to find the duplicates.
Query :- Will be like
db.mycollection.aggregate( { $group: { _id: { foreing: "$foreing", value: "$value" }, count: { $sum: 1 }, docs: { $push: "$_id" } }}, { $match: { count: { $gt : 1 } }} ) OUTPUT :- Will be like
{ "result" : [ { "_id" : { "foreing" : 1, "value" : 2 }, "count" : 2, "docs" : [ ObjectId("34567887654345678987"), ObjectId("34567887654345678987") ] } ], "ok" : 1 } Reference Link :- How to find mongo documents with a same field
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With