如何获取 MongoDB 中某一字段的重复值?
使用 aggregate() 方法获取字段的重复值。我们首先使用以下查询创建带文档的新集合
> db.findAllNonDistinctDemo.insertOne({"UserName":"John","UserAge":28}); { "acknowledged" : true, "insertedId" : ObjectId("5c995078863d6ffd454bb647") } > db.findAllNonDistinctDemo.insertOne({"UserName":"Larry","UserAge":21}); { "acknowledged" : true, "insertedId" : ObjectId("5c995081863d6ffd454bb648") } > db.findAllNonDistinctDemo.insertOne({"UserName":"Larry","UserAge":23}); { "acknowledged" : true, "insertedId" : ObjectId("5c995089863d6ffd454bb649") } > db.findAllNonDistinctDemo.insertOne({"UserName":"David","UserAge":22}); { "acknowledged" : true, "insertedId" : ObjectId("5c995093863d6ffd454bb64a") } > db.findAllNonDistinctDemo.insertOne({"UserName":"John","UserAge":26}); { "acknowledged" : true, "insertedId" : ObjectId("5c99509d863d6ffd454bb64b") } > db.findAllNonDistinctDemo.insertOne({"UserName":"Robert","UserAge":24}); { "acknowledged" : true, "insertedId" : ObjectId("5c9950a7863d6ffd454bb64c") } > db.findAllNonDistinctDemo.insertOne({"UserName":"Robert","UserAge":25}); { "acknowledged" : true, "insertedId" : ObjectId("5c9950b1863d6ffd454bb64d") } > db.findAllNonDistinctDemo.insertOne({"UserName":"Mike","UserAge":29}); { "acknowledged" : true, "insertedId" : ObjectId("5c9950bc863d6ffd454bb64e") }
以下查询用于显示集合中所有文档(借助 find() 方法)
> db.findAllNonDistinctDemo.find().pretty();
将生成以下输出
{ "_id" : ObjectId("5c995078863d6ffd454bb647"), "UserName" : "John", "UserAge" : 28 } { "_id" : ObjectId("5c995081863d6ffd454bb648"), "UserName" : "Larry", "UserAge" : 21 } { "_id" : ObjectId("5c995089863d6ffd454bb649"), "UserName" : "Larry", "UserAge" : 23 } { "_id" : ObjectId("5c995093863d6ffd454bb64a"), "UserName" : "David", "UserAge" : 22 } { "_id" : ObjectId("5c99509d863d6ffd454bb64b"), "UserName" : "John", "UserAge" : 26 } { "_id" : ObjectId("5c9950a7863d6ffd454bb64c"), "UserName" : "Robert", "UserAge" : 24 } { "_id" : ObjectId("5c9950b1863d6ffd454bb64d"), "UserName" : "Robert", "UserAge" : 25 } { "_id" : ObjectId("5c9950bc863d6ffd454bb64e"), "UserName" : "Mike", "UserAge" : 29 }
以下查询用于查找 MongoDB 中字段的所有重复值
> db.findAllNonDistinctDemo.aggregate([ ... { "$group": { ... "_id": "$UserName", ... "Counter": { "$sum": 1 } ... }}, ... { "$match": { ... "Counter": { "$gt": 1 } ... }} ... ]).pretty();
这将生成以下输出。现在可以查看所有重复记录
{ "_id" : "Robert", "Counter" : 2 } { "_id" : "Larry", "Counter" : 2 } { "_id" : "John", "Counter" : 2 }
广告