我的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”(因为我不知道键名)
预先感谢
答案 0 :(得分: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"}
]