Reputation: 203
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.
Upvotes: 20
Views: 13558
Reputation: 23797
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}}},
])
Upvotes: 25