2015-02-04 61 views
1

我打算用MongoDB中和的NodeJS建立我的第一個項目(家譜數據庫),我問自己,如果我的數據模型是正確的選擇:我的MongoDB數據模型是正確的選擇嗎?

人文檔(簡體):

{ 
    "_id": ObjectId("123"), 
    "modified": ISODate("2015-02-04T16:52:32.601Z"), 
    "birth": ISODate("1995-02-04T16:52:32.601Z"), 
    "name": "peter" 
}, { 
    "_id": ObjectId("456"), 
    "modified": ISODate("2015-02-04T16:52:32.601Z"), 
    "birth": ISODate("1999-02-04T16:52:32.601Z"), 
    "name": "uschi" 
} 

關係文件(簡體):

{ 
    "sourceID": ObjectId("123"), 
    "targetID": ObjectId("456"), 
    "type": "Married", 
    "modified": ISODate("2015-02-04T16:52:32.599Z"), 
    "startrelation": ISODate("2001-02-04T16:52:32.601Z"), 
    "endrelation": ISODate("2007-02-04T16:52:32.601Z"), 
    "_id": ObjectId("54d24e5033bfc203aaaad590") 
} 

昨天我試着檢索與所有的人及其相關人員名單,並得到了擔憂我的數據模型,因爲我需要大量的代碼來生成以下結果:

items: [ 
    { 
     "_id": ObjectId("123"), 
     "modified": ISODate("2015-02-04T16:52:32.601Z"), 
     "birth": ISODate("1995-02-04T16:52:32.601Z"), 
     "name": "peter" 
     "married": [{ 
      "_id": ObjectId("456"), 
      "modified": ISODate("2015-02-04T16:52:32.601Z"), 
      "birth": ISODate("1999-02-04T16:52:32.601Z"), 
      "name": "uschi" 
     }, ...] 
    }, ...] 

該解決方案有問題嗎?

+0

我花了很多的工作,因爲你沒有生成結果存儲數據以使計算結果變得容易。存儲數據以便您的常見和重要查詢很容易就是MongoDB範例。如果您需要關於如何設計架構的更多建議,請更新有關常見操作的更多信息。還請查看[MongoDB手冊數據建模示例和模式](http://docs.mongodb.org/manual/applications/data-models/)。 – wdberkeley

+0

感謝您的回覆和您的鏈接。我刪除了我的關係文檔,現在將所有關係存儲在人員文檔中。 我決定存儲相關人員的名稱和人員對象的_id。查詢現在更容易。 – dawie

回答

1

我在這個解決方案中看到的主要問題是您正在使用MongoDB來存儲關係數據。我過去做過這件事,並對此表示遺憾。考慮使用Postgres。它是一個關係數據庫,但也有一個稱爲hstore的功能,允許您存儲和查詢任意結構化的json,如果您的模式有一些區域可能沒有很好定義。

0

看來,圖數據庫將是你的問題域的完美匹配。 這樣你就不必在應用程序中實現與「關係」有關的所有邏輯。 GraphDB本地理解它們。

neo4j

圖形數據庫允許

  • 輕鬆處理複雜的關係

  • 關係非常快速穿越

  • 快速搜索該類型的關係「的朋友一個朋友「,或者是與珍妮相關的吉姆

一般來說,如果您打算在查詢上尋找各種關係的方式你的數據,圖形數據庫是要走的路,