gpt4 book ai didi

node.js - 使用 Mongoose 模式递归地获取所有 child

转载 作者:可可西里 更新时间:2023-11-01 09:48:44 28 4
gpt4 key购买 nike

我正在使用带有 mongoose 的 express 框架,并且我有以下架构:

var DocumentSchema = new Schema({
name: String,
description: String,
parent: {
type: Schema.Types.ObjectId,
ref: "Document"
},
children: [{
type: Schema.Types.ObjectId,
ref: 'Document'
}]
});

我正在尝试获取子级的动态层次结构树,但我找不到任何合适的解决方案。

是否可以使用此架构来做到这一点?如果不是,我应该使用什么模式结构?

最佳答案

我不确定您所说的子级层次结构树是什么意思。所需数据输出的示例会有所帮助。

如果您需要使用您的架构将特定 Node 的所有后代加载到平面结构中,您可以使用如下内容:

getAllChildNodes(startNodeId, callback) {
const tree = [];
let idsToLoad = [];

yourModel.findOne({_id: startNodeId }).exec((err, node) => {
tree.push(node);
idsToLoad = node.children;
let count = 0;

async.whilst(
() => {
return count < idsToLoad.length
},
(cb) => {
yourModel.findOne({_id: idsToLoad[count] }).exec((err, doc) => {
tree.push(doc);
idsToLoad = idsToLoad.concat(doc.children);
count++;
cb();
});
},
(err) => {
if (err) {
console.error(err);
return callback(err);
}
return callback(null, tree);
}
);

});
}

这可能是一个非常昂贵的查询,而且效率不高。如果这是您的主要用例,我不会推荐这种模式类型。我会考虑使用 Materialized PathsNested Sets如果您的数据是静态的。

关于node.js - 使用 Mongoose 模式递归地获取所有 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40797349/

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