如何调整mongo聚合以忽略不相关字段中的重复项

时间:2017-06-02 15:04:35

标签: mongodb

我试图在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来说,这似乎是一个常见的场景,所以我希望有一种简单的方法来调整此查询,以便产生所需的结果。非常感谢任何帮助。

1 个答案:

答案 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"}}}
])