gpt4 book ai didi

javascript - Mongoose递归查询父引用

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

我正在尝试做这个 mongo 示例正在做的事情,但是是在 mongoose 中。对我来说, Mongoose 似乎更复杂。也许我想在圆孔中安装一个方钉?

此示例来自http://www.codeproject.com/Articles/521713/Storing-Tree-like-Hierarchy-Structures-With-MongoD (带有父引用的树结构)

我正在尝试构建一条路径。

var path=[];
var item = db.categoriesPCO.findOne({_id:"Nokia"});
while (item.parent !== null) {
item=db.categoriesPCO.findOne({_id:item.parent});
path.push(item._id);
}
path.reverse().join(' / ');

谢谢!

最佳答案

Mongoose 是一个异步库,因此

db.categoriesPCO.findOne({_id:"Nokia"});

不返回查询的答案,它只返回 Query对象本身。为了实际运行查询,您需要将回调函数传递给 findOne() 或在返回的 Query 对象上运行 exec()

db.categoriesPCO.findOne({_id:"Nokia"}, function (err, item) {
});

但是,您不能使用相同的 while 循环代码来生成路径,因此您需要使用递归。像这样的东西应该有效:

var path=[];

function addToPath(id, callback) {
db.categoriesPCO.findOne({_id:id}, function (err, item) {
if (err) {
return callback(err);
}
path.push(item._id);
if (item.parent !== null) {
addToPath(item.parent, callback);
}
else {
callback();
}
});
}

addToPath("Nokia", function (err) {
path.reverse().join(' / ');
});

注意此外,您可以使用 path.unshift() 将新项目添加到数组的开头,而不是将新项目插入path 数组的末尾,然后反转它。

关于javascript - Mongoose递归查询父引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16119058/

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