如何更新一个对象,并在mongoose同时推入到一个数组

我有一个架构如下

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 'arrays。

我可以通过以下两个步骤来完成:1)通过id更新对象,并设置除了数组'previousEmails'之外的所有字段。2)如果对象的'email'字段被改变,则将旧值推入' previousEmails'数组。

我的问题是,是否有可能一步到位呢? 所以我有我的查询党的$推和$设置?

虽然上面的答案是接近的。 我通过做下面的工作,这是接近,但也增加了$集,这是不包括上面

 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); } }); 
 Friend.findOneAndUpdate({_id: req.body.id}, {email: req.body.email, $push: { previousEmails: this.email } }, {new: true}, function(err, friend){ if (err){ console.log(err); } });