mongodb - 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
}}
])
但它得到错误..
解决方案
试试这个,你的查询中有一些语法错误
$lookup
from table 没有用双引号括起来$match
阶段缺失{}
,$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}}
])
推荐阅读
- python - 无法删除列表中的所有最大元素
- python - 在一行中使用 2 个输入将值相加
- javascript - 如何使用 multer 将文件正确上传到 fs
- flask - “蓝图”对象在烧瓶中没有属性“帖子”
- python - 当图像和数据具有不同大小时,在图像顶部绘制数据
- c# - C# 中的脚本旨在在 Unity 中移动云,但无法正常工作
- python - 使用带有时间戳的 Python 中的 AWS CDK 创建 DynamoDB 表
- .net - 如何使用 MS Graph API 有效地从多个日历中获取日历视图
- java - 如何使用 while 循环来近似 Pi 并接收用户的输入?
- ios - 是否可以为普通的 kv json 创建 Swift Codable?