一尘不染

猫鼬删除文档中的数组元素并保存

node.js

我的模型文档中有一个数组。我想根据我提供的密钥删除该数组中的元素,然后更新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();
        });
    });
};

到目前为止,它可以找到文档,但是删除或保存仍然有效。


阅读 223

收藏
2020-07-07

共1个答案

一尘不染

您也可以直接在MongoDB中进行更新,而不必加载文档并使用代码对其进行修改。使用$pull$pullAll运算符从数组中删除项目:

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

(您也可以将updateMany用于多个文档)

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

2020-07-07