如何定义返回具有相同字段的所有文档的查询

时间:2013-04-05 10:42:49

标签: mongodb

我想创建一个查询来检查我的数据库中哪些文档具有相同的字段值。

e.g。我存储了100个文档,其中2个看起来像这样:

文件1:

{
    "_id":32143242,
    "specialField":12
}

文件2:

{
    "_id":787878,
    "specialField":12
}

那么如果我不知道id或specialField-Value,如何获取这两个文件?

1 个答案:

答案 0 :(得分:0)

这是一项可以使用MongoDB aggregation framework执行的分组操作。

样本数据

> db.foo.find().pretty();
{ "_id" : ObjectId("515ead9c7bb40c6a51b16a68"), "Value" : 12 }
{ "_id" : ObjectId("515ead9d7bb40c6a51b16a69"), "Value" : 12 }
{ "_id" : ObjectId("515ead9f7bb40c6a51b16a6a"), "Value" : 14 }
{ "_id" : ObjectId("515eada07bb40c6a51b16a6b"), "Value" : 8 }

样本分组操作

> db.foo.aggregate({$group : 
    { _id: "$Value", 
      count : {$sum : 1}, 
      ids: { $addToSet : "$_id" } } });

这将返回等于Value的组以及它们的计数和相应的ID:

{
        "result" : [
                {
                        "_id" : 8,
                        "count" : 1,
                        "ids" : [
                                ObjectId("515eada07bb40c6a51b16a6b")
                        ]
                },
                {
                        "_id" : 14,
                        "count" : 1,
                        "ids" : [
                                ObjectId("515ead9f7bb40c6a51b16a6a")
                        ]
                },
                {
                        "_id" : 12,
                        "count" : 2,
                        "ids" : [
                                ObjectId("515ead9d7bb40c6a51b16a69"),
                                ObjectId("515ead9c7bb40c6a51b16a68")
                        ]
                }
        ],
        "ok" : 1
}

您应该阅读聚合框架的文档并了解其局限性。