python - 如何根据主文档 id 匹配 mongodb 子数组?
问题描述
我的 pymongo 脚本中有以下管道:
pipeline = [
{'$match': {'_id': '123456'}},
{'$lookup': {
'from': 'Case',
'localField': '_id',
'foreignField': 'RecordList.Record._id',
'as': 'CaseInfo'}
},
{'$unwind':'$CaseInfo'},
{'$unwind':'$CaseInfo.RecordList'},
{'$unwind':'$CaseInfo.RecordList.Record'},
{'$match': {'CaseInfo.RecordList.Record._id': '123456'}}
]
我需要更改最后一行代码,这样我就不需要手动指定文档 ID,而是从初始文档中获取它。
我试过以下没有运气:
{'$match': {'CaseInfo.RecordList.Record._id': '_id'}}
{'$match': {'CaseInfo.RecordList.Record._id': '$_id'}}
请你帮助我好吗?
另外,这是完成此任务的最有效方法,还是我应该使用 $project?我尝试使用它,但我不知道文档的结构,我需要文档中的每个字段。我不确定是否有办法在 $filter 运算符中不指定“1”(因为我不知道键名)
提前致谢
解决方案
在 3.6 版本中,您可以将最后一行更改为
{'$match': {$expr:{$eq:['$CaseInfo.RecordList.Record._id', '$_id']}}}
.
或者,您可以重写聚合以$lookup
与管道变体一起使用。
就像是
[
{"$match":{"_id":"123456"}},
{"$lookup":{
"from":"Case",
"let":{"_id":"$_id"},
"pipeline":[
{"$unwind":"$RecordList"},
{"$unwind":"$RecordList.Record"},
{"$match":{"$expr":{"$eq":["$RecordList.Record._id","$$_id"]}}}
],
"as":"CaseInfo"
}},
{"$unwind":"$CaseInfo"}
]
推荐阅读
- python - 将日期序列分配给 pandas groupby 组
- reactjs - 无法在反应中加载背景图像
- ios - 等待线程Objective C中的值更改
- java - 切点中的 AspectJ 形式化未绑定
- reactjs - 元素类型无效:应为字符串(用于内置组件)或类/函数(用于复合组件)但得到:符号
- vue.js - TinyMCE 中带有指令的扩展有效元素
- python - Django makemessages “struct.error: unpack 需要 4 个字节的缓冲区”
- ghostscript - 无法在 Windows 10 中编辑 ghostprint ppd
- google-cloud-firestore - Cloud Functions:无法读取未定义的属性“名称”
- java - Unable to fork in spring-boot-maven-plugin