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

时间:2016-08-22 20:24:19

标签: mongodb mongodb-query

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

db.table.update({_id: .... } , {$set : { "tags.Tag1" : true }});

我正在接收

cannot use the part (tags of tags.Tag1) to traverse the element ({tags: null})]]

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

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

2 个答案:

答案 0 :(得分:4)

虽然这是一个老帖子,但我认为你要找的是$ positional operator

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

db.table.update({_id: .... } , {$set : { "tags.$.Tag1" : true }});

希望它有所帮助!

答案 1 :(得分:1)

是的,可以更新...我已经解决了类似的问题

已解决

db.table.updateById({_id: .... } , {$set : { "levelSpecificData.scale.uom": "feet"}});

5b1f566ed65c7dcc34aaa7d5 MongoError: cannot use the part (scale of levelSpecificData.scale.uom) to traverse the element ({scale: false})

在我的收藏集“ levelSpecificData.scale ”中,其中的一个是布尔类型T / F

我将 levelSpecificData.scale 的默认值类型更改为'{}'空对象 ...令人惊讶的是,在将默认值更改为object后,它可以正常工作,因为我想要将 scale 当作对象引用,此解决方案对此非常有用。