我試圖通過單個字段來更新一個mongodb json文檔。我知道這很容易,如果我的數據是在對象數組中,但由於原因和不知情的早期設計選擇,它只是對象內的對象。我的集合中的單個文檔的Mongodb:添加一個字段到嵌入式文檔(無數組)
結構:
{
"_id": 123123,
"drivers_teams": {
"drivers" : {
"4" : { <data> },
"5" : { <data indeed> },
...
},
...
}
}
我要添加新的對象如
const collection = db.get('collection');
let drivers = { };
drivers['111'] = { <new data> };
collection.update({}, {$set: { drivers_teams: { drivers } }}, { upsert: true }, function (err, doc) { ... });
但結果是,在原始對象「drivers_teams」被全殲,具有隻有它的新領域。
如果我嘗試:
collection.update({}, {$set: { drivers }}, { upsert: true }, function (err, doc) { ... });
它不出奇插入一個新的領域的 「司機」 的drivers_teams外
{
"_id": 123123,
"drivers" : { <new data> },
"drivers_teams": { <still original> }
}
類似的問題(+解決方案),在這裏,但JSON是沒有嵌套像我。 https://groups.google.com/forum/#!topic/mongodb-user/ZxdsuIU94AY
有沒有辦法甚至完成我想要做的?或者我應該放棄並覆蓋整個文件,當我想更新單個字段?這裏
編輯
工作的解決方案是{$set: { 'drivers_teams.drivers.111': <data> }}
但我應該提到的是,例如關鍵的「111」實際上是未知的,它來自客戶端在發送更新數據。這就是爲什麼這個新對象是由這個解決方案創建的:dynamically name mongo key field
寫任何類似{ 'drivers_teams.driver.' + key: <data> }
會引發錯誤。
就是這樣!非常感謝! – spiritworld