为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁华开满天机 2021-07-23 18:11:11
我的 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"}

]


查看完整回答
反对 回复 2021-07-28
  • 1 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信