树形结构 - MongoDB 如何存储有序树表?
黄舟
黄舟 2017-04-24 09:12:53
0
1
1034

需要在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和内存)?
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(1)
迷茫

Il existe de nombreuses méthodes de modélisation des structures arborescentes. Lequel as-tu utilisé ?

Si votre ordre est un ordre naturel, vous pouvez obtenir des résultats séquentiels en indexant le champ chemin. Surtout la méthode de matérialisation des chemins. Tel que :

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

Cette méthode peut interroger rapidement tous les points d'octet sous un nœud, et tous les nœuds peuvent être triés en fonction du chemin

Voir le document chinois en cours de traduction : http://docs.mongoing.com/manual-zh/tutorial/model-tree-structures-with-materialized-paths.html

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal