如何根据pymongo聚合中组字段值的最大值添加过滤器

How to add filter based on the maximum of group field value in pymongo aggregations

在我的 MongoDB 集合中,每个文档都有一个字段 score 和一个字段 query,所以我试图按 query 对文档进行分组,即,得到具有相同 query 文件的文档组,与此同时,我只想要那些包含 score = 3 文件的组(score 的范围是 0,1,2,3)。这是我的第一个聚合子句:

agg = [{
    "$group": {
        "_id": "$query",
        "src_ids": {"$push": "$src_id"},
        "sources": {"$push": "$source"},
        "scores": {"$push": "$score"}
    }
}]

所以我想,我必须在 agg 中添加一个关于 scores 中的最大值的 $match,但是我应该怎么做呢?

=============================

编辑

如果我们有 6 个文件:

{"query": "bread", "score": 2, ...}

{"query": "bread", "score": 1, ...}

{"query": "meat", "score": 2, ...}

{"query": "meat", "score": 3, ...}

{"query": "fruit", "score": 0, ...}

{"query": "fruit", "score": 3, ...}

所以这里通过使用上面的聚合子句:db.collection.aggregate(agg),我们有 3 组:breadmeatfruit。但是,如果考虑到分数问题,面包应该是不退的。

因此添加的匹配条件将在 scores 数组中查找 3。

agg = [
{
    "$group": {
        "_id": "$query",
        "src_ids": {"$push": "$src_id"},
        "sources": {"$push": "$source"},
        "scores": {"$push": "$score"}
    }
},
{
    "$match": {
        "scores": 3
    }
}
]

受到@Mani的启发,其实很简单,但我对Mongodb还很陌生。

agg = [{
    "$group": {
        "_id": "$query",
        "src_ids": {"$push": "$src_id"},
        "sources": {"$push": "$source"},
        "scores": {"$push": "$score"},
        "max_score": {"$max": "$score"}
    }},
    {
    "$match": {
        "max_score": {"$eq": 3}
    }}
]