- A+
所属分类:mongodb
在用错mongodb $ 操作符时,会报下面的错误信息:
Cannot apply the positional operator without a corresponding query field containing an array.
测试数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "_id" : ObjectId("5469577e231a5804953b0fc3"), "userid" : 1, "username" : "李四", "dept" : [{ "deptID" : 1, "deptName" : "测试科室123" }, { "deptID" : 1, "deptName" : "测试科室123" }] } |
语句:
db.ttlsa.update({userid:1}, {$set:{"dept.$.deptName":"ttlsa.com"}}, 0, 1) 就会报上没的错误的。
db.ttlsa.update({"dept.deptID":"1"}, {$set:{"dept.$.deptName":"ttlsa.com"}}, 0, 1) 执行正确。
这是为什么呢? 其实就是“$”的使用方法。来看看$ 是啥意思。
update的前两个参数{查询条件}和{更新操作}中,如果在{查询条件}中查询的内容是数组里的内容,{更新操作}中就可以使用"$"来引用前查询中匹配到的元素。
上面的例子中,第一个是查询userid:1的文档,查询条件不包含数组。第二个查询一个数组。
其实就是对更新数组操作符的理解。大家可以看看官方这章内容Array Update Operators

微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~