Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB聚合中的双$match_Mongodb_Aggregation Framework_Pymongo - Fatal编程技术网

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}}
    ])