MongoDB:删除Mongoose中的数组对象

时间:2014-05-24 15:45:31

标签: node.js mongodb mongoose

我有以下架构:

var userSchema = mongoose.Schema({

    local            : {
        email        : String,
        password     : String,
        movies       : [{
                          moviename   : String,
                          rating      : Number
                        }],
    }

});

我使用以下方法向数组添加条目:

user.local.movies.push({ moviename  : "Top Gun", rating     : 80});
user.save(function (err) {
                if (err)
                    console.log("Error in saving");

                res.end(0);
            });

但我也需要删除条目。我需要能够通过" moviename"删除条目。名称。 我尝试使用 pull

 user.local.movies.pull({ moviename  : "Top Gun"});

但它不起作用。

有人可以告诉我如何从阵列中删除条目吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

我认为使用显式update调用而不是Mongoose的数组操作方法更容易,这些方法并不总是像您期望的那样工作:

User.update({_id: user._id}, 
    {$pull: {'local.movies': {moviename: 'Top Gun'}}}, callback);

答案 1 :(得分:1)

这样做的一种方法是使用splice函数从数组中删除元素,假设您可以找到索引。例如:

User.findOne(function(err, user) {
    var movies, index;

    movies = user.movies;

    for (index = 0; index < movies.length; index++) {
        if (movies[index].moviename === "Top Gun") {
            break;
        }
    }
    if (index !== movies.length) {
        movies.splice(index, 1);
    }

    user.save(function(err, user) {
        res.send(user);
    });

});

(知道上面的代码只针对一个用户执行此操作,并且硬编码要删除的影片名称,但您明白了。)