2012-11-12 46 views
12

我正在創建一個應用程序(Express + MongoDB + Mongoose),其中文檔自然地按組進行聚類。對數據庫的每個查詢只需要訪問單個組中的文檔。所以我認爲爲了表現,將每個組分成自己的集合是個好主意。Mongoose - (MongoDB)中的不同集合的相同模式

現在,我將對每個這些集合使用相同的Schema,因爲它們將存儲相同類型的文檔。我曾經擁有一個Model對象,因爲我曾經在一個集合中擁有所有東西,但現在我需要多個模型,每個組合一個。

在每個請求(使用共享模式)上創建一個新的Model對象還是太昂貴了?在這種情況下,什麼是一個好的架構決策?

我能想到的最好的方法是在第一次爲集合請求時創建模型,然後將模型緩存在字典中以便快速訪問。

我想最好的方法取決於在每個請求上創建一個新的Model對象的成本。

謝謝!

回答

20

模型已經被Mongoose緩存,您可以爲多個模型/集合使用相同的模式對象。

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var schema = new Schema({...}); 
var model1 = mongoose.model('model1', schema); 
var model2 = mongoose.model('model2', schema); 

如果你不想繞過model1model2模型實例,你可以看看他們需要通過調用mongoose.model('model1');在:所以只是使用類似的代碼創建的模型設置一次(啓動)你的處理程序。

+0

當我將這兩個集合存儲在*不同的DB上時,我遇到了麻煩。在這種情況下,我建議創建兩個不同的模式,但可以重複使用相同的模式規範對象(上面的「{...}」)。 (我得到的錯誤很奇怪:「驗證失敗:路徑__v是必需的」)。 – joeytwiddle

相關問題