Python 如何根据主文档id匹配mongodb子数组?

Python 如何根据主文档id匹配mongodb子数组?,python,mongodb,aggregation-framework,pymongo,Python,Mongodb,Aggregation Framework,Pymongo,我的pymongo脚本中有以下管道: pipeline = [ {'$match': {'_id': '123456'}}, {'$lookup': { 'from': 'Case', 'localField': '_id', 'foreignField': 'RecordList.Record._id', 'as': 'CaseInfo'} }, {'$unwind':'$CaseInfo'}, {'$unwind':'

我的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.\u id','$\u 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"}
]

我正在使用3.2,我相信$expr是在3.6中引入的,所以我不能使用它。您是否介意解释如何更改为3.2?您必须使用
$project
执行比较,然后执行
$match
,但这将要求您在$project阶段列出其他字段,或者您可以使用
$redact
阶段而不是最后一行中的$match阶段,如
{“$redact”:{“$cond”:[{“$eq”:[“$CaseInfo.RecordList.Record.\u id”、“$\u id”]}、$$KEEP”、“$$PRUNE”]}