获取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 }