モデル ドキュメントに配列があります。指定したキーに基づいてその配列内の要素を削除し、MongoDB を更新したいと思います。これは可能ですか?
これが私の試みです:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var favorite = new Schema({
cn: String,
favorites: Array
});
module.exports = mongoose.model('Favorite', favorite, 'favorite');
exports.deleteFavorite = function (req, res, next) {
if (req.params.callback !== null) {
res.contentType = 'application/javascript';
}
Favorite.find({cn: req.params.name}, function (error, docs) {
var records = {'records': docs};
if (error) {
process.stderr.write(error);
}
docs[0]._doc.favorites.remove({uid: req.params.deleteUid});
Favorite.save(function (error, docs) {
var records = {'records': docs};
if (error) {
process.stderr.write(error);
}
res.send(records);
return next();
});
});
};
これまでのところ、ドキュメントは見つかりましたが、削除も保存も機能しません。
ベストアンサー1
ドキュメントをロードしてコードを使用して変更することなく、MongoDB で直接更新を行うこともできます。配列から項目を削除するには、$pull
or演算子を使用します。$pullAll
Favorite.updateOne({ cn: req.params.name }, {
$pullAll: {
favorites: req.params.deleteUid,
},
});
配列からオブジェクトを削除するには
Favorite.updateOne({ cn: req.params.name }, {
$pullAll: {
favorites: [{_id: req.params.deleteUid}],
},
});
(複数のドキュメントに対して updateMany を使用することもできます)
http://docs.mongodb.org/manual/reference/operator/update/pullAll/