亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mongodb "$" 操作符問題

mongodb "$" 操作符問題

楊__羊羊 2019-04-06 16:57:39
測試數據:{"_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)執行報錯:Cannotapplythepositionaloperatorwithoutacorrespondingqueryfieldcontaininganarray.語句二:db.mydb.update({"comments.by":"joe"},{$inc:{"comments.$.votes":1}},0,1)執行結果正常請問是怎么回事?
查看完整描述

2 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

"comments":[{"by":"joe","votes":3},{"by":"jane",
"votes":7}]這里comments是一個array(見報錯信息),如果要更新的話需要遍歷
                            
查看完整回答
反對 回復 2019-04-06
?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

樓上說的沒錯,comments是一個array,但是不用遍歷。樓主用的"$"就是解決辦法。只是用錯了。來看一下$到底什么意思。
update的前兩個參數<查詢條件>和<更新操作>中,如果你在<查詢條件>中查詢的內容是array里的內容,<更新操作>中就可以使用"$"來引用前查詢中匹配到的元素。
你的第二個例子就是在查詢一個array。在第一個例子里,你找到了title="ABC"的doc,這里匹配查詢條件的不包含array.實際上,你可以把兩個例子中的的查詢條件寫在一起,查詢title="...",同時有Joe留言的那個doc,然后,把找到的這個Joe的留言的投票+1.
                            
查看完整回答
反對 回復 2019-04-06
  • 2 回答
  • 0 關注
  • 421 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號