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.personid
。 localField
要么需要 point to an array
,其中每个成员都用于连接,要么是普通值。解决这个问题的常用方法是先到$unwind
,执行查找,然后在需要时返回$group
。
【讨论】:
以上是关于MongoDB $lookup 仅替换对象数组中的 ID的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Node.js 中高效/快速地执行数组连接,类似于 MongoDB $lookup?
$lookup inside $lookup 在数组中的对象数组中