樹狀結構 - MongoDB 如何儲存有序樹表?
黄舟
黄舟 2017-04-24 09:12:53
0
1
997

需要在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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!