2012-01-03 56 views
0

下面是我的模式。mongoose js:當字段不是列表時應該嵌入文檔嗎?

var UserModel = new Schema({ 
    id: ObjectId 
    , email: String 
    , firstName: String 
    , lastName: String 
    , password: String 
}); 

var MessageModel = new Schema({ 
    id: ObjectId 
    , createdDate: { type: Date, default: Date.now } 
    , user: String // should this be [UserModel]? 
    , body: String 
}); 

對我而言,每條消息都有一個用戶,但只有一個。我應該嵌入UserModel還是應該將用戶字段保留爲字符串。一個未來的用例是返回包含消息正文,創建日期和用戶(名字和姓氏連接)的查詢。謝謝。

回答

1

簡答:不,你不應該使用UserModel作爲MessgeModel的子文檔。

長答案:首先,重新考慮你的命名。你實際上是在這裏定義模式。稍後,您將將模型與這些模式中的每一個相關聯。因此,在這裏,UserSchema和MessageSchema會更合適。

但這不是密切相關的。關於您的問題,您的MessageModel架構不應包含代表用戶的嵌入式文檔,除非存在1對1關係。但是,我希望每個用戶都會與很多消息相關聯(希望)。所以,你不需要爲他創建的每條消息都提供新的用戶副本(每個用戶都有一個新的_id)。您只需要爲每個用戶提供一個規範文檔,並在MessageModel中爲該用戶提供一個引用。

現在,使用字符串引用可能是您的正確選擇。但是,如果您預計在MessageModel上運行查詢,並且您希望user屬性由實際的UserModel文檔填充,那麼您需要使用ref

+0

感謝您的答案。 – 2012-01-03 23:31:33

相關問題