gpt4 book ai didi

node.js - MongoDB - 递归填充文档字段

转载 作者:太空宇宙 更新时间:2023-11-04 00:13:30 25 4
gpt4 key购买 nike

我有一个Page :

const PageSchema = new Schema({
children: [{type: mongoose.Schema.Types.ObjectId, ref: 'Page'}]
});

正如您所看到的每个 Page有一个数组 children这也是 Page .

现在我需要做的是获取所有“主”页面并填充它们的 children数组,很简单,除了我需要从 Page 开始递归地执行此操作。包含 Page 的数组s。

MongoDB 对此没有任何开箱即用的支持,它只支持 2 级深度填充。

这是我当前的查询(为了可读性删除了所有额外的内容),没有使用当前的 .populate方法(因为无论如何它都行不通):

Page.find(query)
.exec((err, pages) => {

if (err) {
return next(err);
}

res.json(pages);
});

我查看了这个类似但不完全是我需要的问题:

mongoose recursive populate

这似乎使用父级来递归填充,并且它也仅从 1 个文档开始,而不是我的场景,它使用一组文档,因为我正在使用 .find而不是.findOne例如。

如何为此创建自己的深度递归填充函数?

旁注:

我知道由于性能问题,我需要的解决方案不被推荐,但我得出的结论是,这是唯一适合我的解决方案。无论是在前端还是后端,我都需要进行递归获取,并且在后端正确执行此操作将大大简化事情。此外,页面数量不会大到足以导致性能问题。

最佳答案

您也可以递归地填充字段,例如:

User.findOne({ name: 'Joe' })
.populate({
path: 'blogPosts',
populate: {
path: 'comments',
model: 'comment',
populate: {
path: 'user',
model: 'user'
}
}
})
.then((user) => {});

请注意,对于第一次填充,您不需要指定 model 属性,因为它已经在您的 model 架构中定义,但对于下一个嵌套人口,你需要这样做。

关于node.js - MongoDB - 递归填充文档字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48367738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com