首页 > 解决方案 > MongoDB 聚合中的双 $match

问题描述

我有两个收藏品

Col1

{"_id":ObjectId("5c13fa0178cd81112f1d5ba5"),
"common_id": 123,
"context":"app"   
}

context 有不同的选项,如“app”、“db”、“network”

Col2

{"_id":ObjectId("5c13fa0178cd81112f1d5b34"),
"common_id":123,
"name":"android-app"
"status":"Up"
}

status 有不同的选项,如“Up”、“Down”、“Degraded”

我有兴趣获得如下结果:

{
"name":"android-app",
}

仅当上下文为 app 且具有相同 common_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
                  }}
                  ])

但它得到错误..

标签: mongodbaggregation-frameworkpymongo

解决方案


试试这个,你的查询中有一些语法错误

  1. $lookupfrom table 没有用双引号括起来
  2. $match阶段缺失{}
  3. $match并且$project字段名称不应以$

询问

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

推荐阅读