假设我有一个Collection ,里面有一些文件.像这样的.

{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":1, "name" : "foo"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":2, "name" : "bar"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":3, "name" : "baz"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":4, "name" : "foo"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":5, "name" : "bar"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":6, "name" : "bar"}

我想通过"名称"字段查找此集合中的所有重复条目.例如,"foo"出现两次,"bar"出现三次.

推荐答案

注意:这个解决方案最容易理解,但不是最好的.

您可以使用mapReduce来确定文档包含某个字段的次数:

var map = function(){
   if(this.name) {
        emit(this.name, 1);
   }
}

var reduce = function(key, values){
    return Array.sum(values);
}

var res = db.collection.mapReduce(map, reduce, {out:{ inline : 1}});
db[res.result].find({value: {$gt: 1}}).sort({value: -1});

Mongodb相关问答推荐

Spring Data MongoDB中的@ Transactions(+测试容器)

用其他集合中的文档替换嵌套文档数组中的值

MongoDB 对特定搜索查询的响应时间较长

为什么使用 Golang Mongo 驱动程序进行简单查询需要超过 2 秒?

MongoDB - 家庭作业(job)帮助.不确定如何在 mongodb 中访问文档中的变量

$lookup 的参数必须是字符串

MongoDB 更新:如果新值不同,则将旧字段值推送到另一个数组字段

将子文档中的所有字段设置为 false,然后在单个查询中将第二个字段设置为 true

Mongoose $inc 枚举验证失败

在亚马逊 EC2 上托管 nodeJS/mongoose Web 应用程序

如果 mongoDB 服务器正在运行,如何从驱动程序判断

Node.js 和 MongoDB,重用 DB 对象

使用 MongoDB 更新数组字段内的特定键/值

spring-data-mongo - 可选查询参数?

NoSQL:MongoDB 或 BigTable 并不总是 Available意味着什么

如何在 MongoDB Map-reduce 映射函数中使用变量

Mongo按实际上是数字的字符串值排序

没有数组的嵌入文档?

在 Mongo 中,$near 和 $nearSphere 有什么区别?

全局初始化失败:BadValue Invalid or no user locale set.请确保正确设置 LANG 和/或 LC_* 环境变量