如何根据主文档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”(因为我不知道键名)


提前致谢


繁华开满天机
浏览 146回答 1
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"}]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python