Chr*_*ris 87 database mongodb aggregation-framework
我如何在mongo集合中找到重复的字段.
我想检查是否有任何"名称"字段是重复的.
{
"name" : "ksqn291",
"__v" : 0,
"_id" : ObjectId("540f346c3e7fc1054ffa7086"),
"channel" : "Sales"
}
Run Code Online (Sandbox Code Playgroud)
非常感谢!
anh*_*hlc 167
在使用聚合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} }
)
Run Code Online (Sandbox Code Playgroud)
要按大多数重复排序结果:
db.collection.aggregate(
{"$group" : { "_id": "$name", "count": { "$sum": 1 } } },
{"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } },
{"$sort": {"count" : -1} },
{"$project": {"name" : "$_id", "_id" : 0} }
)
Run Code Online (Sandbox Code Playgroud)
要与"name"之外的其他列名一起使用,请将 " $ name " 更改为" $ column_name "
Bat*_*eam 21
你可以找到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}}
])
Run Code Online (Sandbox Code Playgroud)
O/P:
{ "duplicateNames" : [ "ksqn291", "ksqn29123213Test" ] }
Run Code Online (Sandbox Code Playgroud)
Tan*_*Dat 21
另一种选择是使用$sortByCount舞台。
db.collection.aggregate([
{ $sortByCount: '$name' }
]
Run Code Online (Sandbox Code Playgroud)
$group这是&的组合$sort。
该
$sortByCount阶段相当于以下$group+$sort序列:Run Code Online (Sandbox Code Playgroud){ $group: { _id: <expression>, count: { $sum: 1 } } }, { $sort: { count: -1 } }
小智 9
db.getCollection('orders').aggregate([
{$group: {
_id: {name: "$name"},
uniqueIds: {$addToSet: "$_id"},
count: {$sum: 1}
}
},
{$match: {
count: {"$gt": 1}
}
}
])
Run Code Online (Sandbox Code Playgroud)
第一组 根据字段查询组。
然后我们检查唯一的 Id 并对其进行计数,如果计数大于 1,则该字段在整个集合中是重复的,以便由 $match 查询处理。
小智 8
如果您的数据库很大,并且属性名称仅出现在某些文档中,那么anhic给出的答案可能会非常无效。
为了提高效率,您可以在聚合中添加$ match。
db.collection.aggregate(
{"$match": {"name" :{ "$ne" : null } } },
{"$group" : {"_id": "$name", "count": { "$sum": 1 } } },
{"$match": {"count" : {"$gt": 1} } },
{"$project": {"name" : "$_id", "_id" : 0} }
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77988 次 |
| 最近记录: |