2014-03-05 56 views
5

我正在嘗試更新我的members_copy集合中的一組文檔。未捕獲的異常:不能有。在字段名稱

db.members_copy.find({"fields.shop.id": 321}).forEach(function(myDoc) {  
    db.members_copy.update({ "_id": myDoc._id}, { "fields.shop": [{"id": 319, "value": "Los Angeles"}] }); 
}); 

我得到以下錯誤:

uncaught exception: can't have . in field names [fields.shop] 

我明白這個問題,但我不能找到解決這個,所以我感謝所有幫助我可以得到的。

+0

所以沒辦法,我可以更新這樣的子文檔? – Repox

+0

你的目標集合中是否有字段子文檔? –

回答

8

如果您的字段子文檔中沒有任何內容,則可以使用$set執行此操作,如果您的文檔中的字段不是fields以外的其他任何內容,則應該使用該選項。

db.members_copy.update(
    { "_id": myDoc._id}, 
    { "$set": { "fields.shop": [{"id": 319, "value": "Los Angeles"}] } } 
); 

但是你不能做的是將項目添加到一個子文件而不需要替換整個東西。所以,如果你想添加shop那裏有一個現有bar你需要做到這一點

db.members_copy.update(
    { "_id": myDoc._id}, 
    { "$set": { 
     "fields": { 
      "bar": "foo", 
      "shop": [{"id": 319, "value": "Los Angeles"}] 
     } 
    } 
); 

只是以這種方式使用一個子文檔的危險。

+0

謝謝你,工作很棒:) – Repox