我的 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”(因为我不知道键名)提前致谢
1 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
在 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"}
]
添加回答
举报
0/150
提交
取消