次のスクリプトを見つけました。
Device.find(function(err, devices) {
devices.forEach(function(device) {
device.cid = '';
device.save();
});
});
MongoDBには、複数のドキュメントを更新するための「マルチ」フラグがありますが、これをmongooseで動作させることはできませんでした。これはまだサポートされていませんか、何か間違っていますか?!
Device.update({}, {cid: ''}, false, true, function (err) {
//...
});
現在、Mongooseのupdate()
にはいくつかの問題があると考えています。 https://groups.google.com/forum/#%21topic/mongoose-orm/G8i9S7E8Erg および- https://groups.google.com/d/topic/mongoose-orm/K5pSHT4hJ_A/discussion 。
ただし、ドキュメントの更新を確認してください: http://mongoosejs.com/docs/api.html (そのモデルの下)。定義は次のとおりです。
以前のソリューション(mongoose 5+バージョンの後に減価償却)
Model.update = function (query, doc, options, callback) { ... }
オブジェクト内でオプションを渡す必要があるため、コードは次のようになります。
Model.update = function ({}, {cid: ''}, {multi: true}, function(err) { ... });
新しいソリューション
Model.updateMany = function (query, doc, callback) { ... }
Model.updateMany = function ({}, {cid: ''}, function(err) { ... });
Mongooseはあなたのcidを$ setでラップするので、mongo Shellで同じアップデートを実行するのと同じではないと思います。シェルで実行した場合、すべてのドキュメントは単一のcid: ''
。
Multi:trueオプションを使用する必要があります
Device.update({},{cid: ''},{multi: true});
これらの回答は非推奨です。これが実際の解決策です。
Device.updateMany({}, { cid: '' });