树形结构 - MongoDB 如何存储有序树表?

 fly-fox 发布于 2022-10-25 07:19

需要在MongoDB里存储一个有序的树表

例如

- 1,a
- 
    - 11,b

- 2,c
- 
    - 21,d
    - 22,e
    - 
        - 221,f

    - 23,g

- 3,h

根据MongoDB官方文档
http://docs.mongodb.org/manual/tutorial/model-tree-structures/
里的各种方案,同级的文档是没有顺序的。但是我需要能排序(能体现该文档在本级中的上下位置) 同时需要在同级中移动和插入新数据。

目前我能想到的方案

方案1,将该文档在本级的顺序写到文档内。

问题:

  1. 每修改一个文档位置,就需要批量修改本级所有记录,在mongoDB里这种批量修改成本是否很高?
  2. 如果多个并发修改,是否会造成数据不一致?

方案2,在上级文档中保存一个下级文档排列顺序的数组

问题:

  1. 这个查询要怎么写?
  2. 这种每次查询都要排序的查询是否系统成本很高(占用大量cpu和内存)?
1 个回答
  • 关于树结构,有多种建模方法。你采用了哪一种呢?

    如果你的顺序是自然顺序,那么对路径字段建索引就可以得到顺序结果。特别是采用物化路径的方法。如:

    { path: "1a", ...}
    { path: "1a,b",  ...}
    { path: "2c", ...}
    { path: "2c,d", ...}
    { path: "2c,e", ...}
    { path: "2c,e,f", ...}
    

    这种方式可以很快的查询到一个节点下所有字节点,并且所有节点可以按照path排序

    参见正在翻译的中文文档: http://docs.mongoing.com/manual-zh/tutorial/model-tree-structures-with-materialized-paths.html

    2022-10-26 14:25 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有