你可以使用下面的语法来查找MongoDB中具有重复值的文档:
db.collection.aggregate([
{"$group" : { "_id": "$field1", "count": { "$sum": 1 } } },
{"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } },
{"$project": {"name" : "$_id", "_id" : 0} }
])
以下是这个语法的作用:
- 将所有在field1中具有相同值的文档分组
- 匹配有一个以上文档的组
- 投射所有有一个以上文档的组
这个特别的查询发现field1列中的重复值。只要改变这个值就可以改变要查找的字段。
下面的例子显示了如何在一个有以下文档的集合队中使用这个语法:
db.teams.insertOne({team: "Mavs", position: "Guard", points: 31})
例子:查找有重复值的文件
我们可以使用下面的代码来查找'team'列中所有的重复值:
db.teams.aggregate([
{"$group" : { "_id": "$team", "count": { "$sum": 1 } } },
{"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } },
{"$project": {"name" : "$_id", "_id" : 0} }
])
这个查询返回以下结果:
{ name: 'Rockets' }
{ name: 'Mavs' }
这告诉我们,'火箭队'和'水牛队'这两个值在'球队'栏中出现了多次。
请注意,我们可以简单地将**position**来代替搜索'position'字段中的重复值:
db.teams.aggregate([
{"$group" : { "_id": "$position", "count": { "$sum": 1 } } },
{"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } },
{"$project": {"name" : "$_id", "_id" : 0} }
])
这个查询的结果如下:
{ name: 'Guard' }
这告诉我们,'Guard'在'position'字段中出现了多次。
其他资源
下面的教程解释了如何在MongoDB中执行其他常见操作: