2016-05-01 163 views
5

我有兩個模型,其中一個是User,另一個是Reservation。我想將一個User對象嵌入到每個Reservation中。用戶已創建並存儲在用戶集合中。當我嘗試創建一個新的Reservation對象時,我的User對象通過預保存方法並最終失敗,因爲有唯一的用戶名字段。有沒有辦法在將對象嵌入到另一個集合時繞過該預存儲方法,或者我的方法完全錯誤?我的預訂模式代碼。謝謝!貓鼬嵌入式文檔前保存

import User from './../users/users.model'; 
const Schema = mongoose.Schema; 

export default new Schema({ 
    user: { 
    type: User 
    } 
}); 

編輯:當我定義的架構明確它繞過了預保存方法(這是有道理的),但如果我想改變模式,我需要改變它在兩個不同的地方。

+1

唯一約束應該解析爲mongo唯一約束,並且不應該應用於子文檔(除非指定,並且即使那樣我也不知道如何工作)。是否有可能要嵌入用戶模式而不是用戶模型,並且在定義預留模式時可能不包括唯一約束。 – ArcSine

+0

你正在使用哪種版本的貓鼬?你是否檢查過這個公開的問題,雖然它是舊的:https://github.com/Automattic/mongoose/issues/2645? – Heval

回答

3

你可以按照這個過程。

而不是指完全收集你應該是指一個特定的用戶一個預訂文件。當你將拯救或創造新的Reservation信息,你應該通過用戶id存儲爲ObjectId,並指該id用戶型號user型號使用ref關鍵字。所以你可以很容易地填充用戶保留模型。

,如:

user:{ 
    type: Schema.Types.ObjectId, 
    ref: 'User' 
    } 

,而不是

user: { 
    type: User 
    } 

或者如果您在預約模式要嵌入用戶模式然後可以使用像

user: { 
     type: [User] 
     } 
+0

我知道我可以引用該對象,但我想嵌入它。謝謝你的信息。 –

+0

而不是引用完整集合,您應通過傳遞id –

+0

將特定用戶引用到預定文檔。讓Array中的用戶無效。它仍然通過驗證 –