我的模型文档中有一个数组。我想根据我提供的密钥删除该数组中的元素,然后更新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(); }); }); };
到目前为止,它可以找到文档,但是删除或保存仍然有效。
您也可以直接在MongoDB中进行更新,而不必加载文档并使用代码对其进行修改。使用$pull或$pullAll运算符从数组中删除项目:
$pull
$pullAll
Favorite.updateOne( {cn: req.params.name}, { $pullAll: {uid: [req.params.deleteUid] } } )
(您也可以将updateMany用于多个文档)
http://docs.mongodb.org/manual/reference/operator/update/pullAll/