如何使用Mongoose删除JSON对象中的数组元素?

时间:2016-11-25 21:12:14

标签: arrays json node.js mongoose

我已经检查了以下stackoverflow问题:

  1. Mongoose delete array element in document and save
  2. How to remove array element in mongodb?
  3. 以下是我的尝试:

    public Long getId() {
        return id;
    }
    
    public void setId(Long id) {
        this.id = id;
    }
    
    public String getSubject() {
        return subject;
    }
    
    public void setSubject(String subject) {
        this.subject = subject;
    }
    
    public Conversation(String subject) {
        this.subject = subject;
    }
    
    public Conversation() {
    
    }
    
    }
    

    我的用户模型:

     var User = require('../model/user_model.js');
    
     router.put('/favoritemovies/:id', function(req, res){
         console.log(req.params.id);
         console.log(req.body.email);//I am able to console.log both value
    
         User.update( {_id: req.body.email}, { $pullAll: { favoriteMovies: {id:req.params.id} } } },
     });
    

    这是我的JSON对象的结构:

    var mongoose = require('mongoose');
    
    var Schema = mongoose.Schema;
    var ObjectId = Schema.ObjectId;
    
    var userSchema =  new Schema ({
        id: ObjectId,
        name:  String,
        password: String,
        email: {type: String, unique: true},
        favoriteMovies: []
    });
    module.exports = mongoose.model('users', userSchema);
    

    我想删除favoriteMovies数组中的一个或多个元素,如果它们的ID为'匹配我的身份证。我没有收到任何错误消息,但该元素也没有删除。

    实现这一目标的正确要求是什么?

3 个答案:

答案 0 :(得分:2)

$pullAll用于从数组中删除多个条目,并在其查询中使用数组。

您只想删除一个条目,因此只需使用$pull

{ $pull: { favoriteMovies: {id: req.params.id} } } }

答案 1 :(得分:1)

使用pull会有效,你确定更新条件是否正确?

roles

关于你的例子:

{_id: req.body.email}

您似乎应该使用:

 "_id": {
    "$oid": "583893712f599701531b60bf"
},

答案 2 :(得分:0)

我发现了问题,我错过了查询结束时的回调函数。

User.update( {_id: req.body.email}, { $pull: { favoriteMovies: { id: req.params.id} }
    }, function(err, model){})