occasl occasl - 5 months ago 259
Node.js Question

Mongoose delete array element in document and save

I have an array in my model document. I would like to delete elements in that array based on a key I provide and then update MongoDB. Is this possible?

Here's my attempt:

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();
});
});
};


So far it finds the document but the remove nor save works.

Answer

You can also do the update directly in MongoDB without having to load the document and modify it using code. Use the $pull or $pullAll operators to remove the item from the array :

Favorite.update( {cn: req.params.name}, { $pullAll: {uid: [req.params.deleteUid] } } )

http://docs.mongodb.org/manual/reference/operator/update/pullAll/

Comments