2012-03-30 47 views
1

我目前負責檢查它是否對我們即將在mongo上開發的產品之一有價值。概念:mongo是否適用模式?

沒有太多細節,我會試着解釋一下,該應用的功能。

該應用程序只包含「實體」。這些實體是技術性的東西,如手機,電視機,筆記本電腦,平板電腦等等。

當然,除了平板電腦和筆記本電腦外,手機還有其他屬性,如RAM,CPU,顯示屏尺寸等。

現在我想要一些我們想要調用的方案:我們定義我們需要保存顯示器尺寸,閃存設備的RAM大小,處理器類型,處理器速度等等。對於手機,我們可能會節省顯示器尺寸,GSM,Edge,3G,4G,處理器,RAM,觸摸屏技術,BL bla bla。我認爲你得到它:)

我想要實現的是,每個「類別」有一個模式,當系統的用戶之一進入一個新產品(讓我們說新的iphone 4),應用程序構造表格填寫適當的屬性。

到目前爲止,它聽起來不錯,應該不是mongo的問題。但現在很難受,我無法找到一個乾淨的解決方案....

在蒙戈建模的屬性看起來像:

{ 
_id: 1234456, name: "Attribute name", type: 0, "description" 
} 

但是做什麼,如果我需要這個屬性多國語言,像:

{ 
en: {name: "Attribute name", type: 0, "description"}, 
de: {name: "Name des Attributs, type: 0, "Beschreibung"} 
} 

我還需要確保的是,德國的屬性得到儘快的英語得到更新更新,例如,當從0類型更改爲1

任何想法在那?

回答

0

mongo數據庫中的文檔可以在一個update語句中更新其任何或所有屬性。沒有觸發器 - 如果您希望在更改type屬性時更新文檔,則需要在應用程序邏輯中執行此操作。

0

您可以通過多種不同的方式解決此問題。

您可以嵌入一個屬性文件中的語言翻譯的數組:

{ 
    _id: 1234, 
    type: 0, 
    somethingElse : "foobar", 
    translation: [ 
     "en" : { name: "Attribute name", description : "Description" } 
     "de" : { name: "Name des Attributs", description: "Beschreibung" } 
    ] 
} 

或者你也可以翻譯分成一個單獨的集合,您可以存儲翻譯鍵和翻譯各種語言的這把鑰匙。

或者您也可以使用您的模型並使用一次更新更新多個屬性。

這一切都取決於您的喜好。

0

在MongoDB中,確保文檔之間或文檔之間邏輯關係的任務(例如,每個描述必須以這五種語言出現)是客戶端程序的責任。有些查詢可以查找符合或不符合規範的文檔,但數據庫本身不會阻止您存儲不符合規範的文檔(除了特殊索引等特殊情況外)。

MongoDB對於關係數據庫的優勢在於能隨着時間的需要隨着時間的推移擴展你的模式。從性能的角度來看,將數據庫更新推送到數據庫而無需對整個文檔進行翻轉(使用$ set或$ push或其他更新功能)可能會有所幫助,並且靈活地索引各種複合字段的功能可以使查詢更快速。

如果我理解你的使用案例,數據總量將會相對較小(幾千個文件,每個文件不超過幾KB),因此適用於適度系統的RAM,因此速度要快。但是你會編寫客戶端邏輯來強加你想要的結構和關係。