如何在MongoDB中查找重复的内容

141 阅读1分钟

你可以使用下面的语法来查找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' }

这告诉我们,'火箭队'和'水牛队'这两个值在'球队'栏中出现了多次。

请注意,我们可以简单地将**team改为team**改为**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中执行其他常见操作:

MongoDB:如何在集合中添加一个新字段
MongoDB:如何按分组和计数
MongoDB:如何按多个字段分组