2017-04-24 8 views
0

いくつかの問題を解決するにはいくつかの助けが必要です。Mongoose - Modle.update()が間違ったドキュメントを更新しました - キャストエラー

私はモデルがあります:

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(); 
    }); 
} 

と一致しない場合でも、それが唯一の最初の文書を更新=をfindByIdAndUpdateを使用しているとき、私にエラー(下記参照)

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

エラーを与える:Cast to ObjectId failed for value ""58fdbde31bff83141b376508"" at path "_id" for model "Event"

どうか、私は絶望的です:! :/私はIDを照合してドキュメントを探していたとき、私はその周りに「」で格納されます渡そうと、そうだidが、それは余分なペアを置くことを考え出し

UPDATE "" ID ""

UPDATE "その周りに、それは次のように終わるので、" 2

私はすべてのドキュメントを一覧表示していた場合、それが返されます。

{ _id: 58fdbde31bff83141b376508, 

event_code: 'TestABC', 

__v: 0, 

segments: [] } 

私はHTMLフォームにIDを格納すると、その周りに余分なペアが追加されます。これはevent_codeの場合とは異なります。何故ですか ?

+1

チェック:JSON.parseを呼び出すと、問題を解決する必要があります。 –

+1

find()を使って作業しているときは、{_ id:id} ...というIDを指定してください。idはあなたによって指定されます。一致させるキーを指定する必要があります。 –

+0

私は実際に文字列としてIDを渡しています。 console.log(id);上記の例で私は58fdbde31bff83141b376508を私に与えます...しかし、私はまた、 '{_id:id}' =同じエラーで結果を得ようとしました –

答えて

1

あなたが不要なJSON.stringifyを実行したように見えるので、idの周りに引用符が表示されます。あなたは、関数edit_eventを呼び出しているとき、それは文字列でなければなりません「ID」のための右PARAMTERを渡しているかどうか

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

+0

それはそれだと思います! ...どのようにしてidの周りで最初に終わったのか...私はそれを見なければならない。 –

+0

私は正しい方向に向いてくれてありがとう、私はIDをHTMLフォームに間違った方法で格納しようとしました...それは2つの ""ペアを置くことに終わりました....私はとても愚かです。 .. –

関連する問題