我试图在MongoDB上调整聚合命令,以便忽略给定字段的重复项。这是一个示例文档:
{
"_id" : ObjectId("xxx"),
"dev_type" : "Foo"
"should_be_unique" : "abcdefg"
}
现在我的代码会搜索各种" dev_types的计数。"我希望保留该功能,同时减少计数,使其不计算字段中的重复数量" should_be_unique。"
我现有的Python代码如下所示:
result_set = db.aggregate([
{"$match": match_condition},
{"$group": {"_id": {"dev_type": "$dev_type"},
"total": {"$sum": 1}}}, ])
这将返回此类结果:
{ "_id" : { "dev_type" : "Foo" }, "total" : 2 }
{ "_id" : { "dev_type" : "Bar" }, "total" : 7 }
我已经尝试了一些选项,但是对于我来说,我无法找到最简洁的方法来改变这样的查询,同时还能消除重复。我们的想法是,如果两个文件具有相同的" should_be_unique"价值,两者都有" dev_type"设置为" Bar,"那么" Bar"将是6而不是7,由于重复而减少。
对于Mongo来说,这似乎是一个常见的场景,所以我希望有一种简单的方法来调整此查询,以便产生所需的结果。非常感谢任何帮助。
答案 0 :(得分:1)
您可以使用$addToSet
累积should_be_unique
阶段中的唯一$group
值,然后使用$project
$size
来计算值。
像
这样的东西 db.collection.aggregate([
{"$group": {"_id": {"dev_type": "$dev_type"},"unique": {"$addToSet": "$should_be_unique"}}},
{"$project": { "total": {"$size": "$unique"}}}
])