猫鼬递归查询父引用
Mongoose recursive query parent reference
我想做的正是这个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(' / ');
});
NB此外,您可以使用path.unshift()
将新项添加到数组的开头,而不是push
将新项添加到path
数组的末尾然后反转它。
相关文章:
- 数组在递归方法中设置为null
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 递归使用 eval() 是检查程序执行的好方法吗?
- 使用递归、Ramda.js和无点样式重构字符串的getPermutations()
- 递归深度比较
- Eloquent JavaScript递归示例如何终止为返回1,但仍然输出指数值
- 递归函数中断
- 如何递归地获取嵌套对象中所有子对象的列表
- JavaScript 素数搜索无限递归
- 在递归生成器函数中,yield后面的*(星号/星号)语法意味着什么
- Javascript递归函数引用了这一点
- 使用哪个-递归查询或特定正则表达式
- 在递归调用中避免空引用
- j查询如何在循环中确定递归级别
- 使用Node JS递归获取DynamoDB查询中的所有项
- Angular $resource递归查询
- 如何在递归调用中保持对数据结构的引用
- 猫鼬递归查询父引用
- 在重绑定函数引用时避免递归
- 在递归函数中保持对象引用