Cannot apply the positional operator without a corresponding query field containing an array.

默北 mongodbCannot apply the positional operator without a corresponding query field containing an array.已关闭评论8,174字数 629阅读2分5秒阅读模式

在用错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/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北
  • 本文由 发表于 09/12/2014 01:00:42
  • 转载请务必保留本文链接:https://www.ttlsa.com/mongodb/cannot-apply-the-positional-operator-without-a-corresponding-query-field-containing-an-array/