【发布时间】:2016-07-18 16:05:50
【问题描述】:
我正在尝试按单个字段更新 mongodb json 文档。我知道如果我的数据在对象数组中会很容易,但由于原因和不知情的早期设计选择,它只是对象中的对象。
我的收藏中单个文档的结构:
{
"_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 之外插入了一个新字段“drivers”
{
"_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> } 之类的东西会引发错误。
【问题讨论】:
标签: javascript json mongodb monk