搜尋

首頁  >  問答  >  主體

mongodb "$" 操作符问题

测试数据:

{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : 
"ABC", 
  "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", 
"votes" : 7 } ] } 

执行更新语句:

语句一:

db.mydb.update({title:"ABC"}, {$inc:{"comments.$.votes":1}}, 0, 1)

执行报错:Cannot apply the positional operator without a corresponding query field containing an array.

语句二:

db.mydb.update({"comments.by":"joe"}, {$inc:{"comments.$.votes":1}}, 0, 1)

执行结果正常

请问是怎么回事?

天蓬老师天蓬老师2768 天前645

全部回覆(2)我來回復

  • PHPz

    PHPz2017-04-21 11:18:52

     "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", 
    "votes" : 7 } ]

    這裡 comments 是一個 array (見報錯資訊),如果要更新的話需要遍歷

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-21 11:18:52

    樓上說的沒錯,comments是一個array,但是不用遍歷。樓主用的"$"就是解決方法。只是用錯了。來看看$到底什麼意思。

    update的前兩個參數<查詢條件>和<更新操作>中,如果你在<查詢條件>中查詢的內容是array裡的內容,<更新操作>中就可以使用"$"來引用前查詢中匹配到的元素。

    你的第二個例子就是在查詢一個array。在第一個例子裡,你找到了title="ABC"的doc, 这里匹配查询条件的不包含array. 实际上,你可以把两个例子中的的查询条件写在一起,查询 title="...",同時有Joe留言的那個doc, 然後,把找到的這個Joe的留言的投票+1.

    回覆
    0
  • 取消回覆