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查询处理。