Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Mongodb:将树存储为一个嵌套文档还是每个节点存储一个文档?_Json_Jquery Ui_Mongodb_Tree - Fatal编程技术网

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

Json Mongodb:将树存储为一个嵌套文档还是每个节点存储一个文档?,json,jquery-ui,mongodb,tree,Json,Jquery Ui,Mongodb,Tree,我正在使用MongoDB,我想在其中存储各种树 存储树的一种方法是将每个节点存储为文档,并引用其子节点/父节点/祖先节点(如上所述) 另一种存储方式是将整个树存储为一个文档,子文档作为子文档。e、 g tree : { "title" : "root", "children" : [ { "title" : "node_1", "children" : [ ...

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

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

  • 另一种存储方式是将整个树存储为一个文档,子文档作为子文档。e、 g

    tree : {
        "title" : "root",
        "children" : [
            {
                "title" : "node_1",
                "children" : [
                    ...
                ]
            },
            {
                "title" : "node_2",
                "children" : [
                    ...
                ]
            }
        ]
    }
    
问题:建议采用哪种方式储存树木

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

  • 添加一个节点
  • 删除节点
  • 更新节点
  • 获取整个树的json
由于我计划在UI上使用(您可以推荐一个更好的替代JsTree的方法)显示此树,它需要嵌套格式的json数据(方法2),因此我考虑以相同的方式存储数据,而不是方法1

如果我以方式1将json数据存储在db中,那么我必须为每个文档/节点映射一个java对象,然后手动在java中创建一个树对象,方法是将每个父对象指向其相应的子对象,然后将该java树对象转换回json以获得嵌套的json

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

class Node {
    private String title:
    private List<Node> children;
}
类节点{
私有字符串标题:
私人名单儿童;
}

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

因此,我建议您将每个节点存储为自己的文档,并查看存储父子关系的位置。请记住优化数据操作的模式。
在这种情况下,我同意你的“第一条路”。如果你不需要改变树很多,而且你说树的读操作要比写操作多1000倍,那么你可以考虑使用“方法2”,只是处理额外的工作来更新几个级别的节点。

< p>看起来你将在树中的嵌套节点的不同层次上进行大量的操作。尽管MongoDB可以存储您描述的结构,但它不太适合在许多嵌套级别进行更新

因此,我建议您将每个节点存储为自己的文档,并查看存储父子关系的位置。请记住优化数据操作的模式。 在这种情况下,我同意你的“第一条路”。如果你不需要改变树很多,而且你说树的读操作要比写操作多1000倍,那么你可以考虑使用“方法2”,只是处理额外的工作来更新几个级别的节点。