Answers:
在使用聚合name,并得到name有count > 1:
db.collection.aggregate(
{"$group" : { "_id": "$name", "count": { "$sum": 1 } } },
{"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } },
{"$project": {"name" : "$_id", "_id" : 0} }
)
要将结果按最多至最少重复项进行排序:
db.collection.aggregate(
{"$group" : { "_id": "$name", "count": { "$sum": 1 } } },
{"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } },
{"$sort": {"count" : -1} },
{"$project": {"name" : "$_id", "_id" : 0} }
)
要与“ name”以外的其他列名一起使用,请将 “ $ name ” 更改为“ $ column_name ”
"$match": {"_id" :{ "$ne" : null } -在这里是不必要的,因为语句的第二部分足以过滤结果。因此,仅检查具有的组即可count > 1。
_id字段。始终保证该group操作后不为null 。
_id从一个文档的$group阶段,可以为空。
你可以找到list的duplicate使用下列名称aggregate管道:
Group所有记录都相似name。Match那些groups有记录大于1。group再次将project所有重复的名称作为array。代码:
db.collection.aggregate([
{$group:{"_id":"$name","name":{$first:"$name"},"count":{$sum:1}}},
{$match:{"count":{$gt:1}}},
{$project:{"name":1,"_id":0}},
{$group:{"_id":null,"duplicateNames":{$push:"$name"}}},
{$project:{"_id":0,"duplicateNames":1}}
])
o / p:
{ "duplicateNames" : [ "ksqn291", "ksqn29123213Test" ] }
db.getCollection('orders').aggregate([
{$group: {
_id: {name: "$name"},
uniqueIds: {$addToSet: "$_id"},
count: {$sum: 1}
}
},
{$match: {
count: {"$gt": 1}
}
}
])
第一组根据字段查询组。
然后,我们检查唯一的Id并将其计数。如果count大于1,则该字段在整个集合中重复,以便由$ match查询处理。