为了账号安全,请及时绑定邮箱和手机立即绑定

mongodb "$" 操作符问题

mongodb "$" 操作符问题

拉丁的传说 2019-04-07 09:37:52
测试数据:{"_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 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

"comments":[{"by":"joe","votes":3},{"by":"jane",
"votes":7}]这里comments是一个array(见报错信息),如果要更新的话需要遍历
                            
查看完整回答
反对 回复 2019-04-07
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

楼上说的没错,comments是一个array,但是不用遍历。楼主用的"$"就是解决办法。只是用错了。来看一下$到底什么意思。
update的前两个参数<查询条件>和<更新操作>中,如果你在<查询条件>中查询的内容是array里的内容,<更新操作>中就可以使用"$"来引用前查询中匹配到的元素。
你的第二个例子就是在查询一个array。在第一个例子里,你找到了title="ABC"的doc,这里匹配查询条件的不包含array.实际上,你可以把两个例子中的的查询条件写在一起,查询title="...",同时有Joe留言的那个doc,然后,把找到的这个Joe的留言的投票+1.
                            
查看完整回答
反对 回复 2019-04-07
  • 2 回答
  • 0 关注
  • 303 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信