Mongodb 不能使用部分 (...) 来遍历元素 ({...: undefined})]

Ole*_*leg 4 mongodb mongodb-query

升级到 3.0 mongo 驱动程序后,我收到更新请求的一些新错误。对于这样的更新:

db.table.update({_id: .... } , {$set : { "tags.Tag1" : true }});
Run Code Online (Sandbox Code Playgroud)

我正在接收

cannot use the part (tags of tags.Tag1) to traverse the element ({tags: null})]]
Run Code Online (Sandbox Code Playgroud)

问题是我更新的文档已经包含默认值tags:null。如果我从文档中手动删除它,更新开始正常工作。这对我来说是一些新行为,它发生在将 mongo 驱动程序从 2 更新到 3(甚至不是数据库本身)之后。

但现在我想知道如何避免这个错误。我当然可以检查“标签”是否已经定义,然后才制作$set元素或整个地图。但这意味着 3 个请求 vs 一个旧请求以及原子性等其他问题。

小智 6

虽然这是一篇旧帖子,但我认为您正在寻找的是$ 位置运算符

我猜你的“标签”是一个数组。所以上面的例子可能是这样的

db.table.update({_id: .... } , {$set : { "tags.$.Tag1" : true }});
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!