2016-06-09 74 views
1

所以我想要做的就是添加到文檔中的對象而不刪除整個東西。我有一個包含數組的文檔,如果我調用findOneAndUpdate,它會添加我想要的內容,但會清除數組中已有的所有內容。使用Mongoose更新MongoDB文檔而不刪除文檔中已有的信息

我想要做的就是保留我已經在我的陣列中,並添加一個項目。

這裏是我的代碼:

Friends.findOneAndUpdate({facebookId: value.id}, {$set: {friends: {id: profile.id, name: profile._json.name}} }, {new: false}, function (err, friends) { 
    if(err){ 
     console.log("Something went wrong when updating data!"); 
    } 

    console.log("success saving user friend update"); 
}); 

而且這裏是我的陣列在數據庫中發生:

此:

"friends": [ 
    { 
     "id": "114222474148205", 
     "name": "Chris Chang" 
    }, 
    { 
     "id": "903622474147290", 
     "name": "Johny Unitas" 
    }, 
    { 
     "id": "685034985392094", 
     "name": "Mary Jane" 
    } 
] 

要這樣:

"friends": { 
    "id": "49572957395733524", 
    "name": "John Doe" 
} 

我想要的是那些t我要合併。

那麼,我將如何「添加」一個項目,而不是「更新」該項目?

+2

使用[$推(https://docs.mongodb.com/manual/reference/operator/update/push/ )而不是* $ set * – joao

+0

工作。謝謝! –

回答

2

正如若奧所說,我所要做的就是將$設置爲$ push。

所以這個:

Friends.findOneAndUpdate({facebookId: value.id}, {$push: {friends: {id: profile.id, name: profile._json.name}} }, {new: false}, function (err, friends) { 

,而不是這樣的:

Friends.findOneAndUpdate({facebookId: value.id}, {$set: {friends: {id: profile.id, name: profile._json.name}} }, {new: false}, function (err, friends) {