gpt4 book ai didi

json - Mongodb:将一棵树存储为一个嵌套文档还是每个节点存储一个文档?

转载 作者:可可西里 更新时间:2023-11-01 10:04:48 29 4
gpt4 key购买 nike

我正在使用 MongoDB,我想在其中存储各种树。

  • 存储树的一种方法是将每个节点存储为一个文档,并引用其子节点/父节点/祖先节点(如前所述 here )

  • 另一种存储方式是将整个树存储为一个文档,子文档为子文档。例如

    tree : {
    "title" : "root",
    "children" : [
    {
    "title" : "node_1",
    "children" : [
    ...
    ]
    },
    {
    "title" : "node_2",
    "children" : [
    ...
    ]
    }
    ]
    }

问题:建议采用哪种方式存储树木?

以下是我要对我的数据执行的操作:

  • 添加节点
  • 删除一个节点
  • 更新一个节点
  • 获取整棵树的json

因为我计划使用 JsTree 在 UI 上显示这棵树(你可以推荐一个更好的 JsTree 替代品),它需要嵌套格式的 json 数据(方式 2),我想用相同的方式存储数据而不是方式 1。

如果我以方式 1 将 json 数据存储在数据库中,那么我将不得不为每个文档/节点映射一个 java 对象,然后通过将每个父对象指向其相应的子对象,然后在 java 中手动创建一个树对象,然后进行转换该 java-tree-object 返回到 json 以获取嵌套的 json。

每个节点的 Jave 对象如下所示:

class Node {
private String title:
private List<Node> children;
}

最佳答案

看起来您要在树中不同级别的嵌套节点中进行大量操作。尽管 MongoDB 可以存储您描述的结构,但它不太擅长让您在很多嵌套级别进行更新。

因此我建议您将每个节点存储为它自己的文档,并查看存储父子关系的位置。请记住优化数据操作的架构。在这种情况下,我会选择你的“方式 1”。如果您不必对树进行大量更改,并且您说对树的读取操作比写入操作多 1000 倍,那么您可以考虑使用“方式 2”,只需处理更新节点所需的额外工作几层深。

关于json - Mongodb:将一棵树存储为一个嵌套文档还是每个节点存储一个文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17630378/

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