我已经搜索了一段时间,但找不到任何好的答案。我有一棵 深 树,要存储在数据库中,我想填充 所有父母, 所以最终我得到了完整的树
node
-parent
-parent
.
.
-parent
到目前为止,我已经填充到2级,并且如上所述,我需要达到 n 级。
Node.find().populate('parent').exec(function (err, items) {
if (!err) {
Node.populate(items, {path: 'parent.parent'}, function (err, data) {
return res.send(data);
});
} else {
res.statusCode = code;
return res.send(err.message);
}
});
只是不要:)
没有做到这一点的好方法。即使您做了一些map-reduce,它也会有可怕的性能,如果您有或将要使用它,则将导致分片问题。
Mongo作为NoSQL数据库确实非常适合存储树文档。您可以存储整棵树,然后在没有很多“查找特定叶”查询的情况下,使用map-
reduce从中获取特定的叶。如果这对您不起作用,请选择两个集合:
简化的树状结构:{_id: "tree1", tree: {1: [2, {3: [4, {5: 6}, 7]}]}}
。数字只是节点的ID。这样,您将在一个查询中获得整个文档。然后,您只需提取所有ID并运行第二个查询。
节点:{_id: 1, data: "something"}
,{_id: 2, data: "something else"}
。
然后,您可以编写简单的循环函数,该函数将用第二个数据替换第一个集合的节点ID。2个查询和简单的客户端处理。
小更新:
您可以扩展第二个集合,使其更加灵活:
{_id: 2, data: "something", children:[3, 7], parents: [1, 12, 13]}
这样,您将可以从任何叶子开始搜索。然后,使用map-reduce到达树的该部分的顶部或底部。
问题内容: 知道如何在Mongoose模式中为Tree文档建模吗? 一个人怎么能这样呢?整个树是一个文档(理想情况下)。 问题答案: 来自https://groups.google.com/forum/#!topic/mongoose- orm/0yUVXNyprx8 : 通过设计,它可能会起作用。没有测试。为此,我在那里产生了递归引用: 因此,您需要逐步构造递归。
问题内容: 我从Mongoose网站上阅读了快速入门,几乎复制了代码,但是无法使用Node.js连接MongoDB。 这是我的代码。控制台仅打印,不打印。我哪里错了? 问题答案: 调用时,它将建立与数据库的连接。 但是,您在以后的某个时间点(处理请求时)附加了事件侦听器,这意味着该连接可能已经处于活动状态,并且该事件已经被调用(您尚未监听它)。 。 您应该重新排列代码,以使事件处理程序尽可能(及时
我有项目租赁应用程序。我需要决定在date_finish和date_start(包括这些日期)之间的日期中是否有car可用。我有模型车和订单。订单有很少的字段:和、如何只取这些在start_date和stop_date之间可用的CARID(包括这两天)。 汽车: 订单: 状态:1为新订单,2为当前持续的订单,3为存档/已完成的订单 mongoose查询: 那个查询不起作用。谁能帮我? 编辑:我必须
问题内容: 我已经查看了网站上的一些问题,但还没有弄清楚我在做什么错。我有一些这样的代码: 我不确定在中间应该做什么以使其正确更新数据库。我已经尝试了很多东西,但是无法撤消以找出所有我尝试过的东西。我一整夜都花了时间,我希望它能正常工作。 这几乎是我想要的,我想知道是否有任何方法可以在条件部分 我会继续玩弄它。 问题答案: 这正是我想要的,只有一行。:D完美!
问题内容: 我有一个猫鼬模型与用户模型有关联,例如 当我实例化一个新模型时,我会做: 模型的构造函数需要使用许多参数,这些参数在架构更改时编写和重构很繁琐。有没有办法做类似的事情: 还是创建帮助器方法以生成JSON对象甚至将userId附加到请求正文的最佳方法?还是我什至没有想到的方式? 问题答案: 或者如果您要将userId复制到req.body中:
问题内容: 是否有人使用过nodejs模块“ deferred”和“ mongoose”?我试图让deferred.promisify方法可以在猫鼬模型的函数上工作,以便我可以轻松地将它们链接起来,但是会遇到一些麻烦。具体来说,我想对和函数进行赋值处理,以便可以通过ObjectID链接查找另一个文档引用的一个文档。 这就是我所拥有的:https : //gist.github.com/332182