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

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

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

membalas semua(1)
迷茫

Terdapat banyak kaedah pemodelan untuk struktur pokok. Yang mana satu yang anda gunakan?

Jika pesanan anda adalah tertib semula jadi, anda boleh mendapatkan hasil berurutan dengan mengindeks medan laluan. Terutama kaedah mewujudkan jalan. Seperti:

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

Kaedah ini boleh menanya dengan cepat semua titik bait di bawah nod dan semua nod boleh diisih mengikut laluan

Lihat dokumen Cina sedang diterjemahkan: http://docs.mongoing.com/manual-zh/tutorial/model-tree-structures-with-materialized-paths.html

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan