如何在mongoose中同时更新对象并推入数组

时间:2016-06-16 17:21:03

标签: node.js mongodb mongoose

我有一个Schema如下

var FriendsSchema = new Schema({
  email: {
    type: String
  }
  firstName: String,
  lastName:  String,
  previousEmails:[{
    email:{
      type:String
    }
  }],
  createdDate:{
    type:Date,
    default:Date.now
  },
  updatedDate:{
    type:Date,
    default:Date.now
  }
});

我想要做的是,在更新时,如果“电子邮件”发生变化,我想将“电子邮件”字段更新为传入的新值,并将当前的“电子邮件”值推送到'previousEmails'数组。

我能够通过以下两个步骤完成此任务: 1)通过id更新对象,并设置除数组'previousEmails'之外的所有字段 2)如果对象的“email”字段已更改,请将旧值推送到“previousEmails”数组中。

我的问题是,是否可以一步到位?所以我将$ push和$ set作为我查询的一方?

2 个答案:

答案 0 :(得分:1)

虽然上面的答案很接近。我通过执行以下操作使其工作,这是关闭但也添加$ set,这不包括在上面

Friend.findOneAndUpdate({_id: req.body.id}, {$set:{email: req.body.email}, $push: { previousEmails: this.email } }
}, {new: true}, function(err, friend){
    if (err){
        console.log(err); 
    } 
});

答案 1 :(得分:-1)

Friend.findOneAndUpdate({_id: req.body.id}, {email: req.body.email, $push: { previousEmails: this.email } 
}, {new: true}, function(err, friend){
    if (err){
        console.log(err); 
    } 
});