41

私は Node.js と Mongo/Mongoose に比較的慣れていないため、特定の Mongoose エラーのトラブルシューティングに非常に苦労しています。

VersionError: 一致するドキュメントが見つかりません。

(この質問の下部にあるエラー トレース/スタック全体。)

このブログ投稿では、VersionError がどのように発生するかを明確に説明しています。

(TL;DR - 「Mongoose v3 では、スキーマで構成可能なバージョン キーが各ドキュメントに追加されるようになりました。この値は、配列の変更によって配列の要素の位置が変更される可能性があるたびに、原子的にインクリメントされます。」ドキュメントを保存しようとすると、バージョンキーが取得したオブジェクトと一致しなくなった場合、上記の結果が得られますVersionError。)

主な質問:問題のある操作を表示する方法はありsave()ますか? または、保存に失敗したドキュメントはどれですか? それとも何か?;)

課題:これは多くの配列を持つ比較的大きなコード ベースであり、問​​題のトラブルシューティングを開始する方法がわかりません。特に、エラー トレース/スタックは、問題が存在する場所を示していないようです。下記参照:

VersionError: No matching document found.
at handleSave (<project_path>/node_modules/mongoose/lib/model.js:121:23)
at exports.tick (<project_path>/node_modules/mongoose/lib/utils.js:408:16)
at null.<anonymous> (<project_path>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/collection.js:484:9)
at g (events.js:192:14)
at EventEmitter.emit (events.js:126:20)
at Server.Base._callHandler (<project_path>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js:391:25)
at Server.connect.connectionPool.on.server._serverState (<project_path>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:558:20)
at MongoReply.parseBody (<project_path>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:131:5)
at Server.connect.connectionPool.on.server._serverState (<project_path>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:517:22)
at EventEmitter.emit (events.js:96:17)
4

5 に答える 5

11

robertklepが指摘しているように、おそらく同じドキュメントを同時に保存することを指しています。

async.parallel を使用して同じドキュメントで同時保存を実行すると、同様の問題が発生しました。

于 2013-09-05T11:32:42.790 に答える