我正在使用MongoDB 2.6.7,我在MongoDB mode tree structure with array of ancestors之后创建了Categories集合,但这个模型真的让我的编码变得复杂,所以我想知道是否有人可以通过最好的模型/架构设计来建议我遵循以便最好地实现我的类别收集需求,如下所示:
A. Build a tree with unlimited levels of categories and sub-categories
B. For any node in the tree I can easily know the list of this node ancestors
C. For any node in the tree I can easily know if it has any child nodes or not
D. I can only create sub-nodes (sub-categories) to those categories not referenced by any item in the inventory
E. I can move any sub-node in the tree along with its child-nodes to a different node, sod for example if i have:
- 1
--11
---111
---112
---113
-----1131
-----1132
-----1133
--12
---121
---122
---123
so I can move node 113 with its sub-children 1131, 1132, 1133 and place 113 under 123 so that it will look like this:
- 1
--11
---111
---112
--12
---121
---122
---123
-----113
--------1131
--------1132
--------1133
我目前的类别集合设计如下:
{ _id: "",
ancestors: [ ],
parent: ""
}
感谢您的帮助。
答案 0 :(得分:1)
在一个字段中添加直接子项或仅表示有子项:
{
_id: "",
ancestors: [<_id's>],
"children" : [<_id's>]
}
我不确定parent
的目的是什么。这看起来像是A-C的良好架构设计。 D是应用程序需要强制执行的操作。 E也不是很糟糕,它只涉及更新正在重新定位的根节点的所有子节点的祖先。 B和E彼此争用 - 如果您通过将祖先存储在节点上来快速了解祖先,则需要在重新定位子树时更新所有子节点。 B很可能比E更常见,因此快速B对于繁琐的E的权衡是合理的。