2017-04-24 38 views
0

我需要一些幫助來清除一些事情。Mongoose - Modle.update()更新錯誤的文檔 - Cast Error

我有一個模型:

var Event = new Schema({ 
    event_code: String 
, segments: [Segment] 
}); 

的新文檔的創建工作得非常好喜歡完美。當涉及到更新某些文件時,我遇到了一些麻煩。

當我這樣做(下面的代碼): =它只更新的第一個文檔,即使id不符合

function edit_event (id, new_name, callback) { 
    Event.update(id, {$set:{event_code: new_name}}, function(err, doc) { 
    if (err) throw err; 
    callback(); 
    }); 
} 

當我(下面的代碼)做到這一點: =它給我一個錯誤(見下文)

function edit_event (id, new_name, callback) { 
    Event.findByIdAndUpdate(id, {$set:{event_code: new_name}}, function(err, doc) { 
    if (err) throw err; 
    callback(); 
    }); 
} 

錯誤使用findByIdAndUpdate時:Cast to ObjectId failed for value ""58fdbde31bff83141b376508"" at path "_id" for model "Event"

拜託,我很絕望:! :/

UPDATE

我想通了,我試圖通過獲取存儲與「」周圍,所以當我在尋找文件相匹配的ID標識它把一個額外的對「」 圍繞它,所以它最終像 「」 ID 「」

更新2

當我列出我的所有文件,它返回:

{ _id: 58fdbde31bff83141b376508, 

event_code: 'TestABC', 

__v: 0, 

segments: [] } 

然後,當我將這個id存儲在一個HTML表單中時,它在它周圍增加了一對「...」,這與event_code不一樣。這是爲什麼 ?

+1

檢查您是否通過爲「ID」,當你調用函數edit_event,應該字符串正確參數中。 –

+1

當您使用find()時,您應該指定參數爲{_id:id} ... id由您提供。您需要指定要匹配的密鑰。 –

+0

我傳遞的確實是一個字符串的id。的console.log(ID);在上面的例子給我58fdbde31bff83141b376508 ...但是我也試圖'{_id:id}'=導致相同的錯誤 –

回答

1

看起來你不需要執行JSON.stringify,這就是爲什麼你會得到id的報價。調用JSON.parse要解決這個問題:

Event.findByIdAndUpdate(JSON.parse(id), {$set:{event_code: new_name}}, ...

+0

我想是的! ......如何最終以「」身份在身邊?「我需要注意這一點。 –

+0

感謝您指出我正確的方向,原來我試圖存儲在錯誤的方式進入HTML表單...最終在兩個「對」周圍....天我很愚蠢。 .. –

相關問題