2012-08-08 32 views
1

我發現一個StackOverflow Question非常接近回答我的問題,但不是那裏。MongoDB:用字典更新數組中的文檔

取這個原始問題(修改數組中的一個文檔),但假設你沒有你想要做的特定改變。相反,我有一本我想做的改變的字典。這裏有一個例子:

原始文檔

{ 
    _id: something, 
    recipients: [{id:1, name:"Andrey", isread:false}, {id:2, name:"John", isread:false}] 
} 

更改進行

{ 
    isread: true, 
    fullname: 'jonathan' 
} 

如何申請本詞典的變化約翰(ID:2)? 櫃面它是相關的,我現在用的是MongoDB-Node.JS Driver 謝謝

回答

3

就像在你提到的問題,你需要使用$positional operator,但update在這種情況下:

collection.update({_id:something, 'recipients.id': 2}, {$set: {'recipients.$': { 
    isread: true, 
    fullname: 'jonathan' 
}}}, function (err) {... 

編輯

爲了不替換整個數組元素對象,你必須這樣做:

collection.update({_id:something, 'recipients.id': 2}, {$set: { 
    'recipients.$.isread': true, 
    'recipients.$.fullname': 'jonathan' 
}}, function (err) {... 
+0

它幾乎在工作但整個文件正在被替換。下面是一個更具體的例子,我試圖做的是:https://gist.github.com/3298315 – tgrosinger 2012-08-08 20:24:48

+1

我提交了一個編輯,但它正在等待同行評審。您可以多次使用位置操作符,因此不必將整個嵌入式文檔設置在該位置,而是可以分別設置收件人。$。isread「和」「收件人。$。fullName」「字段。 – jmikola 2012-08-08 20:47:42

+0

這是否意味着我將不得不提交字典中每個字段的更新?不幸的是,我不知道哪些字段會提前更新,這就是爲什麼我只想使用變化字典。 – tgrosinger 2012-08-08 20:53:04