Yat*_*oel 2 tree json jquery-ui mongodb
我正在使用 MongoDB,我想在其中存储各种树。
存储树的一种方法是将每个节点存储为文档,并引用其子节点/父节点/祖先(如此处所述)
另一种存储方式是将整个树存储为一个文档,将子文档存储为子文档。例如
tree : {
"title" : "root",
"children" : [
{
"title" : "node_1",
"children" : [
...
]
},
{
"title" : "node_2",
"children" : [
...
]
}
]
}
Run Code Online (Sandbox Code Playgroud)问题:建议采用哪种方式存储树木?
以下是我要对数据执行的操作:
由于我计划使用JsTree在 UI 上显示此树(您可以推荐 JsTree 的更好替代方案),它需要嵌套格式的 json 数据(方式 2),因此我考虑以相同的方式存储数据,而不是方式 1。
如果我以方式 1 将 json 数据存储在数据库中,那么我将必须为每个文档/节点映射一个 java 对象,然后通过将每个父级指向其相应的子级来手动在 java 中创建一个树对象,然后将该 java-树对象返回 json 以获取嵌套的 json。
每个节点的 Jave 对象如下所示:
class Node {
private String title:
private List<Node> children;
}
Run Code Online (Sandbox Code Playgroud)
看起来您将在树中不同级别的嵌套节点中进行大量操作。尽管 MongoDB 可以存储您所描述的结构,但它不太擅长允许您在大量嵌套级别进行更新。
因此,我建议您将每个节点存储为它自己的文档,并查看存储父子关系的位置。请记住优化数据操作的模式。在这种情况下我会选择你的“方式1”。如果您不必对树进行大量更改,并且您说对树的读取操作比写入操作多 1000 倍,那么您可以考虑使用“方式 2”,只需处理更新节点所需的额外工作深几层。