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

评论