gpt4 book ai didi

javascript - Mongoose .js : How to Implement Tree Structure via Population

转载 作者:IT老高 更新时间:2023-10-28 13:23:26 27 4
gpt4 key购买 nike

我正在使用 Mongoose 3.x 实现一个树结构(类似于 Mongo 文档中的这个),但我不确定封装所有逻辑以加载特定节点及其兄弟节点的最佳方式和祖先一般,特别是如何最好地使用 ref 与 ref-er 位于同一集合中的人口功能。

在某些情况下,我正在使用的树是未编辑节点但可能随时将新子节点添加到任何节点的树。到目前为止,我已经使用一组模型方法正常工作,这些方法在初始查找后加载对象,但似乎应该有更好的方法来轻松加载单个分支,其中包含我需要的所有父级和兄弟级数据 Controller 中的命令,并将所有相关人口封装在模型上的一些方便的查找方法中。

然后,我尝试使用的基本架构可能是这样的(也可在此处获得:https://gist.github.com/3889616):

// Sub-document to store parent ref along with it's value (a form of caching)
var Parent = new Schema({
id: ObjectId
, text: String
});

// Main tree-node element schema
var Branch = new Schema({
text: {
type: String
, required: true }
, date: {type: Date, default: Date.now }
, trail: [Parent]
, parentBranchId: ObjectId
, parentBranch: { type: Schema.Types.ObjectId, ref: 'Branch' }
, _children: [{type: Schema.Types.ObjectId, ref: 'Branch'}]
// These two have been commented out because I have no clue how to best implement
// , _priorSiblings: { type: Schema.Types.ObjectId, ref: 'Branch' }
// , _followingSiblings: { type: Schema.Types.ObjectId, ref: 'Branch' }
});

然后,我希望能够通过类似以下代码的方式加载带有相关相关数据的分支,尽管此时我几乎迷失了方向,并且可能是一个很好的基础:

  req.app.models.Branch
.findById(req.param("id"))
.populate("parentBranch")
.populate("parentBranch._children")
.exec(...)

最终,我希望有一些东西可以抽象成 Mongoose 的“树”插件,但我认为我必须首先正确地构建这个架构。有什么想法吗?

FWIW,归根结底,我真正需要的每个分支的数据是父级、下一个兄弟级、前一个兄弟级(都在创建时间方面)和父级的所有子级。

提前致谢!

最佳答案

我知道这个问题很老了,但是你有没有研究过 mongoose-tree 模块? https://github.com/franck34/mongoose-tree

它有一个很好的 API 来处理 IMO 对象之间的关系。

关于javascript - Mongoose .js : How to Implement Tree Structure via Population,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12888103/

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