2014-05-03 88 views
1

那麼失敗的價值」,我看到這裏有這樣的幾個崗位,但他們並沒有幫我...CastError:投射到的ObjectId「在路徑「_id」

讓我描述了我的問題:

我有兩個架構的

var A = new Schema({ 
    someAttribut: {type: String}, 
    b: {type: ObjectId, ref:'B'} 
}); 

var B = new Schema({ 
    someAttribut2: {type: Boolean, 'default': false'} 
}); 

現在我在,我已經有一個B-對象的情況,我想創建一個A-對象。

所以我做這種方式:

var a = new A(req.aFromClient); // {_id:null, someAttribute:'123', b:null} 
//load b from Database ... 
a.b = existingBFromDatabase; // {_id: 'Sb~Õ5ÙÐDâb', someAttribute2: false} 

B對象是從我monogDB加載。調試器爲我顯示了一個有效的ObjectId(53627ed535d9d04416e26218或Sb〜Õ5ÙÐDâb)。

但是,當我救我的新A-對象,我得到的錯誤:

「CastError演員到的ObjectId‘在路徑‘_id’失敗值’」我不明白爲什麼我得到這個錯誤。 首先,我沒有在模式中定義id,所以貓鼬應該添加它,這似乎工作。 其次,我認爲當我創建一個對象時,貓鼬應該生成一個新的ID。

你有什麼建議嗎?

回答

1

根據代碼中的評論,_id確實有的值(null)。所以,你需要從它創建新的文檔A之前,從req.aFromClient刪除_id

delete req.aFromClient._id; 
var a = new A(req.aFromClient); 
+0

將它設置爲未定義就足夠了嗎? – Laokoon

+0

@Lookoon不,如果您希望Mongoose爲您的新文檔提供'_id'值,則不能在您的初始doc對象中包含'_id'屬性。 – JohnnyHK

0

你應該這樣做:

a.b = existingBFromDatabase._id; 

因爲貓鼬只能用現有對象的ID工作。

相關問題