我有一个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作为我查询的一方?
答案 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);
}
});