MongoDB聚合中的双$match
我有两个收藏 可乐 上下文有不同的选项,如“应用程序”、“数据库”、“网络” 可乐 状态有不同的选项,如“向上”、“向下”、“降级” 我对以下结果感兴趣:MongoDB聚合中的双$match,mongodb,aggregation-framework,pymongo,Mongodb,Aggregation Framework,Pymongo,我有两个收藏 可乐 上下文有不同的选项,如“应用程序”、“数据库”、“网络” 可乐 状态有不同的选项,如“向上”、“向下”、“降级” 我对以下结果感兴趣: { "name":"android-app", } 仅当上下文为app且具有相同公共_id的项的状态为up时 我试过: col1.aggregate([{"$match": {"context":"app"}},
{
"name":"android-app",
}
仅当上下文为app且具有相同公共_id的项的状态为up时
我试过:
col1.aggregate([{"$match": {"context":"app"}},
{"$lookup": {"from":col2,
"localField": "common_id",
"foreignField": "common_id",
"as": "output_info"}},
{"$unwind": {"path": "$output_info"}},
{"$match": "$output_info.status":"Up"},
{
"$project":{
"$output_info.name":1
}}
])
但这是一个错误。对于mongodb,我最初的建议是将两个集合合并为一个集合,而不使用聚合。这些数据听起来非常相关和可组合。组合后,您可以执行查询 db.col.find({context:“app”,status:“Up”})
如果您必须有一个聚合,我可以更深入地查看查询 试试这个,您的查询中有一些语法错误
$lookup
未用双引号括起来$match
阶段缺少{}
$match
和$project
字段名不应以$
从第二个
$match
阶段和$project
中删除$
。而$project
阶段应该是{$project:{name:“$output\u info.name”}
作为聚合调试提示,请尝试一次将管道的阶段添加到1中,直到看到分解的位置。你的第一场比赛很可能不是问题。假设您的实际集合2名称为“集合2名称”,则不存在任何问题。但如果没有考虑到这一点,那么在查找过程中传入的所有字段都必须是字符串。另外,在NoSqlBooster(免费)这样的mongodb编辑器中编写查询也是非常有用的,它将在很多时候告诉您语法错误的位置。
{
"name":"android-app",
}
col1.aggregate([{"$match": {"context":"app"}},
{"$lookup": {"from":col2,
"localField": "common_id",
"foreignField": "common_id",
"as": "output_info"}},
{"$unwind": {"path": "$output_info"}},
{"$match": "$output_info.status":"Up"},
{
"$project":{
"$output_info.name":1
}}
])
db.col1.aggregate([
{"$match": {"context":"app"}},
{"$lookup": {
"from":"col2",
"localField": "common_id",
"foreignField": "common_id",
"as": "output_info"
}},
{"$unwind": {"path": "$output_info"}},
{"$match": {"output_info.status":"Up"}},
{"$project":{"output_info.name":1}}
])