2016-06-16 35 views
2

我有一個架構如下如何更新一個對象,並推到一個數組,同時在貓鼬

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

我所試圖做的是,在更新,如果「電子郵件」我想將'email'字段更新爲傳入的新值,並將當前'email'值推送到'previousEmails'數組中。 2)如果對象的'email'字段發生了變化,則可以通過以下兩個步驟完成此操作: 1)按ID更新對象,並設置除數組'previousEmails'之外的所有字段。 2)將舊值推入'previousEmails'數組中。

我的問題是,是否有可能一步到位呢?所以我有$ push和$ set作爲我的查詢的一方?

回答

1

雖然上面的答案很接近。我得到它通過做以下工作,這是接近,但也增加了$集,這是不包括以上

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

請編輯更多的信息。僅限代碼和「嘗試這個」的答案是不鼓勵的,因爲它們不包含可搜索的內容,也不解釋爲什麼有人應該「嘗試這個」。我們在這裏努力成爲知識的資源。 – abarisone