我想创建一个查询来检查我的数据库中哪些文档具有相同的字段值。
e.g。我存储了100个文档,其中2个看起来像这样:
文件1:
{
"_id":32143242,
"specialField":12
}
文件2:
{
"_id":787878,
"specialField":12
}
那么如果我不知道id或specialField-Value,如何获取这两个文件?
答案 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
}
您应该阅读聚合框架的文档并了解其局限性。