2016-02-29 150 views
2
的子陣

我的貓鼬對象:貓鼬 - 推到對象

{ 
    "_id" : "568ad3db59b494d4284ac191", 
    "name" : "MyCompany", 
    "description": "whatever" 
    "items" : [ 
     { 
      "_id" : "568ad3db59b494d4284ac19f", 
      "fields" : { 
       "Name" : "Item1", 
       "Internal ID" : "ID00042", 
       "tags" : [ 
        { 
         "Description" : "Tag1", 
         "Level" : 2 
        }, 
        { 
         "Description" : "Tag2", 
         "Level" : 3 
        } 
       ] 
      } 
     },   { 
      "_id" : "568ad3db59b494d4284ac19f", 
      "fields" : { 
       "Name" : "Item2", 
       "Internal ID" : "ID00043", 
       "tags" : [ 
        { 
         "Description" : "Tag1", 
         "Level" : 5 
        }, 
        { 
         "Description" : "Tag5", 
         "Level" : 1 
        } 
       ] 
      } 
     }, {..} 
    ] 
} 

我需要按以下標籤:

var obj = { 
     "Description" : "myDescription", 
     "Level" : 3 
}; 

爲以下項目的標籤陣列:

var internal_id = "ID00102"; 

我的嘗試不起作用:

Company.findOneAndUpdate(
    { "_id": "568ad3db59b494d4284ac191", "items.fields['Internal ID]": internal_id }, 
    { 
     "$push": { 
      "tags": thetag 
     } 
    }, 
    function(err,doc) { 
     if (err) res.status(500).send(err); 
     return res.status(200).send(doc); 
    } 
); 

回答

2

$ positional operator一起應用$push運營商在更新代碼對象添加到tags領域。該$ positional operator將確定items數組中正確的元素沒有顯式指定數組中元素的位置更新,因此您的最終更新語句應該是這樣的:

Company.update(
    { "_id": "568ad3db59b494d4284ac191", "items.fields.Internal ID": internal_id }, 
    { 
     "$push": { 
      "items.$.fields.tags": thetag 
     } 
    } 
) 
0
Company.findOneAndUpdate(
{ "_id": "568ad3db59b494d4284ac191", "items.fields['Internal ID]": internal_id }, 
    { 
     "$push": { 
      "tags": thetag 
     } 
    }, 
    function(err,doc) { 
     if (err) res.status(500).send(err); 
     return res.status(200).send(doc); 
    } 
); 

在上面的例子中:

{ "_id": "568ad3db59b494d4284ac191", "items.fields['Internal ID]": internal_id }, 

MISSING '在「items.fields [' 內部ID]「

在對象名中使用空格並不是很好的做法,因爲它在「items.fields.Internal ID」中並不總是有效,並且出現了一些尷尬的問題。使用internalId而不是讓事情變得尷尬。