MongoDB $lookup 仅替换对象数组中的 ID

Posted

技术标签:

【中文标题】MongoDB $lookup 仅替换对象数组中的 ID【英文标题】:MongoDB $lookup to replace only the ID in an array of objects 【发布时间】:2020-11-12 10:07:55 【问题描述】:

我在名为“Profile”的 mongodb 集合中保存了以下示例 JSON 对象


   name: "Test",
   relations: [
       
          personid: <MongoDB-ID>, 
          type: "Friend", 
          duration: 5 
      ,
       
          personid: <MongoDB-ID>, 
          type: "Family", 
          duration: 9 
      ,
   ]

我使用了 mongoose-Aggregate 函数,因为我需要根据保存的文档中的计算添加人工字段。在我的聚合结束时,我使用 $lookup-function 替换“relations”-array 内对象中的属性“personID”。


   $lookup:
     
       from: PersonModel.collection.name,
       localField: 'relations.personid',
       foreignField: '_id',
       as: "relations.personid"
     
 

因为我希望将对象数组中的每个“人”替换为从特定人员文档填充的内容。 这不能按预期工作。 我还尝试在聚合函数返回的结果上调用“.populate()”,但也没有用。

【问题讨论】:

【参考方案1】:

不支持将localField 设置为relations.personidlocalField 要么需要 point to an array ,其中每个成员都用于连接,要么是普通值。解决这个问题的常用方法是先到$unwind,执行查找,然后在需要时返回$group

【讨论】:

以上是关于MongoDB $lookup 仅替换对象数组中的 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Node.js 中高效/快速地执行数组连接,类似于 MongoDB $lookup?

$lookup inside $lookup 在数组中的对象数组中

MongoDB在具有附加字段的对象数组上聚合$lookup

MongoDB在具有附加字段的对象数组上聚合$lookup

mongodb `$lookup` 或 `join` 与对象数组内的属性

mongodb 中的 $lookup 嵌套数组