在我的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"}
}
}]
所以我想我必须在$match
的{{1}}中添加一个scores
,但该怎么做?
==========================
修改
如果我们有6个文件:
agg
{"query": "bread", "score": 2, ...}
{"query": "bread", "score": 1, ...}
{"query": "meat", "score": 2, ...}
{"query": "meat", "score": 3, ...}
{"query": "fruit", "score": 0, ...}
因此,在这里,通过使用上面的聚合子句:{"query": "fruit", "score": 3, ...}
,我们有3组:db.collection.aggregate(agg)
,bread
,meat
。但是,如果考虑分数问题,则不应该退回面包。
答案 0 :(得分:0)
因此添加的匹配条件将在scores数组中查找3。
agg = [
{
"$group": {
"_id": "$query",
"src_ids": {"$push": "$src_id"},
"sources": {"$push": "$source"},
"scores": {"$push": "$score"}
}
},
{
"$match": {
"scores": 3
}
}
]
答案 1 :(得分:0)
受@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}
}}
]