I have a collection containing entries in following format:
{
"_id" : ObjectId("5538e75c3cea103b25ff94a3"),
"userID" : "USER001",
"userName" : "manish",
"collegeIDs" : [
"COL_HARY",
"COL_MARY",
"COL_JOHNS",
"COL_CAS",
"COL_JAMES",
"COL_MARY",
"COL_MARY",
"COL_JOHNS"
]
}
I need to find out the collegeIDs those are repeating. So the result should give "COL_MARY","COL_JOHNS" and if possible the repeating count. Please do give a mongo query to find it.
You can find duplicate values within your MongoDB database using the aggregate method along with the $group and $match aggregation pipeline operators. For a closer look at MongoDB's aggregation pipeline operators see the article Aggregations in MongoDB by Example.
To check if there were duplicate items in the original array, just compare the length of both arrays: const numbers = [1, 2, 3, 2, 4, 5, 5, 6]; const unique = Array. from(new Set(numbers)); if(numbers. length === unique.
However, mongodb stores duplicates with different _id s. Many solutions suggest adding unique index on collection, but it isn't possible in my case.
To search the array of object in MongoDB, you can use $elemMatch operator. This operator allows us to search for more than one component from an array object.
Probably there would be many of these documents and thus you want it per ObjectId.
db.myCollection.aggregate([
{"$project": {"collegeIDs":1}},
{"$unwind":"$collegeIDs"},
{"$group": {"_id":{"_id":"$_id", "cid":"$collegeIDs"}, "count":{"$sum":1}}},
{"$match": {"count":{"$gt":1}}},
{"$group": {"_id": "$_id._id", "collegeIDs":{"$addToSet":"$_id.cid"}}}
])
This might be what you want to, not clear from your question:
db.myCollection.aggregate([
{"$match": {"userID":"USER001"}},
{"$project": {"collegeIDs":1, "_id":0}},
{"$unwind":"$collegeIDs"},
{"$group": {"_id":"$collegeIDs", "count":{"$sum":1}}},
{"$match": {"count":{"$gt":1}}},
])
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