5

組み合わせる方法と、mongoose のネイティブ versionKey をインクリメントする方法はありModel.findByIdAndUpdateますModel.increment()か? またはModel.update()、任意のインクリメント__v?

このコードは増加しません__v

Station.update({ _id: req.params.id }, 
               { $set: req.body, $inc: { __v: 1 } }, 
               { multi: false },  callback);

ただし、任意のカスタムNumberフィールドをインクリメントします。

Station.update({ _id: req.params.id }, 
               { $set: req.body, $inc: { count: 1 } }, 
               { multi: false },  callback);

これまでのところ、インクリメントする方法は1つしか見つかりませんでした__v:

Station.findById(req.params.id, function (err, station) {
    station.increment();  // this increments __v
    station.save(req.body, callback)
})
4

1 に答える 1

4

これは設計によるものである可能性があります。 特に__v、特別なマングース内部キーは、ドキュメントの配列要素の位置が変更されたときに複数の保存操作が衝突するのを防ぐために使用されます。アトミック更新操作自体はこのリスクにさらされないため、単独でインクリメントする必要はありません__v

ただし、アトミックな更新を非アトミックな検索/保存構造にインターリーブすることは可能であるため、開発者が確認できるようにイシューを提出しました。

于 2012-12-30T20:34:00.673 に答える