i have a collection with more then 1000 documents and there are some documents with same value in some fields, i need to get those
the collection is:
[{_id,fields1,fields2,fields3,etc...}]
what query can i use to get all the elements that have the same 3 fields for example:
[
{_id:1,fields1:'a',fields2:1,fields3:'z'},
{_id:2,fields1:'a',fields2:1,fields3:'z'},
{_id:3,fields1:'f',fields2:2,fields3:'g'},
{_id:4,fields1:'f',fields2:2,fields3:'g'},
{_id:5,fields1:'j',fields2:3,fields3:'g'},
]
i need to get
[
{_id:2,fields1:'a',fields2:1,fields3:'z'},
{_id:4,fields1:'f',fields2:2,fields3:'g'},
]
in this way i can easly get a list of "duplicate" that i can delete if needed, it’s not really important get id 2 and 4 or 1 and 3
but 5 would never be included as it’s not ‘duplicated’
EDIT:
sorry but i forgot to mention that there are some document with null value i need to exclude those
2
Answers
I think you can try this aggregation query:
_ids
that are repeated.$match
)._id
found.Example here
This is the perfect use case of window field. You can use
$setWindowFields
to compute$rank
in the grouping/partition you want. Then, get those rank not equal to 1 to get the duplicates.Mongo Playground