裏面一個MEAN.js的應用程序,我有一個具有subdoc的參考架構:設置在一個未定義/ null的子文檔ObjectID字段的值會產生鑄造到的ObjectId錯誤
var EmployeeSchema = new Schema({
supervisor: {
type: Schema.Types.ObjectId,
ref: 'User',
},
...
我能使用或不使用監督員字段,從模式創建模型。如果該值設置爲創建,那麼我就能來取消它,像這樣:
employee.supervisor = undefined;
employee.save(function(err) {
...
然而,如果該字段值是不確定的已經,那麼我就無法在其後設置的任何值 - 這將產生以下錯誤:
CastError: Cast to ObjectId failed for value "[object Object]" at path "supervisor"
事實上,在試圖再次將該值設置爲不確定的,具有相同的.save代碼路徑,會導致同樣的錯誤。這個錯誤來自哪裏?它指的是什麼(當我發送一個未定義的值)?
我對貓鼬比較新。這感覺像是一個基本問題,並且很可能是用戶錯誤。如果我沒有使用正確的模式,請告訴我。我正在使用貓鼬3.8.8,我轉移到3.8.23,無濟於事。
編輯:一些可能很重要的事情是,當員工返回給客戶時,主管人員已經填充。使用MEAN boilerplate express控制器進行更新似乎存在一個問題,即執行將已更改狀態的_.assign發送給發送給客戶端的req.employee數據。
如果我再次手動查詢員工,並設置/取消設置主管字段,那麼我可以在沒有錯誤的情況下獲得預期的行爲。這包括設置爲未定義,並設置回有效值。因此,它歸結爲人口+使用請求數據執行更新的組合。
使用$取消設置爲按[鏈接](http://stackoverflow.com/questions/4486926/delete-a-key-from-a-mongodb-document-using-mongoose)未定義+保存等同於更新+未設置。這不是這種情況嗎? – 2015-02-25 01:43:32