1

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

例如,我存储了 100 个文档,其中 2 个看起来像这样:

文件 1:

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

文件 2:

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

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

4

1 回答 1

0

这是可以使用MongoDB 聚合框架执行的分组操作。

样本数据

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

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

于 2013-04-05T11:00:56.620 回答