搜尋

首頁  >  問答  >  主體

樹狀結構 - MongoDB 如何儲存有序樹表?

需要在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和記憶體)?
黄舟黄舟2849 天前1144

全部回覆(1)我來回復

  • 迷茫

    迷茫2017-04-24 09:14:53

    關於樹狀結構,有多種建模方法。你採用了哪一種呢?

    如果你的順序是自然順序,那麼對路徑欄位建立索引就可以得到順序結果。特別是採用物化路徑的方法。如:

    { 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

    回覆
    0
  • 取消回覆