Node.js MongoDB:删除Mongoose中的数组对象

Node.js MongoDB:删除Mongoose中的数组对象,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有以下模式: var userSchema = mongoose.Schema({ local : { email : String, password : String, movies : [{ moviename : String, rating : Numbe

我有以下模式:

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”名称的条目。 我试着使用

 user.local.movies.pull({ moviename  : "Top Gun"});
但它没有起作用

有人能告诉我如何从数组中删除条目吗


谢谢。

一种方法是使用函数从数组中删除元素,前提是您可以找到索引。例如:

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

});
User.findOne(函数(err,User){
var、指数;
movies=user.movies;
用于(索引=0;索引

(要知道,上面的代码只对一个用户执行此操作,并对要删除的电影名称进行硬编码,但您知道这一点。)

一种方法是使用函数从数组中删除元素,前提是您可以找到索引。例如:

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

});
User.findOne(函数(err,User){
var、指数;
movies=user.movies;
用于(索引=0;索引

(要知道,上面的代码只对一个用户执行此操作,并对要删除的电影名称进行硬编码,但您知道这一点。)

一种方法是使用函数从数组中删除元素,前提是您可以找到索引。例如:

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

});
User.findOne(函数(err,User){
var、指数;
movies=user.movies;
用于(索引=0;索引

(要知道,上面的代码只对一个用户执行此操作,并对要删除的电影名称进行硬编码,但您知道这一点。)

一种方法是使用函数从数组中删除元素,前提是您可以找到索引。例如:

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

});
User.findOne(函数(err,User){
var、指数;
movies=user.movies;
用于(索引=0;索引

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

我认为使用显式的
更新
调用比使用Mongoose的数组操作方法更容易,因为它并不总是像您预期的那样工作:

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

我认为使用显式的
update
调用比使用Mongoose的数组操作方法更容易,因为Mongoose的数组操作方法并不总是像您预期的那样有效:

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

我认为使用显式的
update
调用比使用Mongoose的数组操作方法更容易,因为Mongoose的数组操作方法并不总是像您预期的那样有效:

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

我认为使用显式的
update
调用比使用Mongoose的数组操作方法更容易,因为Mongoose的数组操作方法并不总是像您预期的那样有效:

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

pull()
之后是否调用
save()
?是的。和我在Push中做的一样。在
pull()
之后是否调用
save()
?是的。和我在Push中做的一样。在
pull()
之后是否调用
save()
?是的。和我在Push中做的一样。在
pull()
之后是否调用
save()
?是的。和我推的一样。