mongodb 更新数据问题
发布于 9 年前 作者 taoerchun 6815 次预览 最后一次回复是 9 年前 来自 问答
下面为数据库存储数据,现在需要更新userId= ObjectId(“55546f25a668fa781d00000a”)的userName db.test.findAndModify({students.userId:ObjectId(“55546f25a668fa781d00000a”)},{更新语句}) 一般的做法是将students字段查出来,再赋值新的userName,再将整个students字段更新,因为该字段数据量较大,全部更新效率太低 请教各位是否有更好的方法?谢谢! test表 { "_id" : ObjectId(“562df55f82099a923c911dd8”), “students” : [ { “userId” : ObjectId(“55546f25a668fa781d00000a”), “userName” : “莫扎特”, }, { “userId” : ObjectId(“55548b3c7309cf4c26000006”), “userName” : “莫扎特2”, } ] }
18 回复
https://docs.mongodb.com/manual/reference/operator/update/positional/#up.S
@jiangli373 非常感谢!
@jiangli373 这种用法findAndModify不支持吧?
@taoerchun 应该是可以的吧,你可以试试
@taoerchun
https://docs.mongodb.com/v3.0/reference/method/db.collection.findAndModify/
@jiangli373 貌似不行,报错了
@taoerchun 仔细看下,括号写错了
@taoerchun
@jiangli373 忘加update关键字了。
@jiangli373 id不是自己想知道,说知道就知道的。 这个方法有点死。
{ _id: 4, grades: [ { grade: 80, mean: 75, std: 8 }, { grade: 85, mean: 90, std: 5 }, { grade: 90, mean: 85, std: 3 } ] } Use the positional $ operator to update the value of the std field in the embedded document with the grade of 85:
db.students.update( { _id: 4, “grades.grade”: 85 }, { $set: { “grades.$.std” : 6 } } )
@NextZeus 什么意思?id我是知道的
@NextZeus 呃 你id不知道 怎么查询呢 你想更新数据你总得知道查询条件吧 再说我这也是实例代码 不设计逻辑 From Noder
@taoerchun 你确定是忘记加update关键字了吗 是大括号写的有问题吧 From Noder
@jiangli373 括号确实有问题,但不加query、update关键字也会报错
@jiangli373 还有一个返回子文档的问题再次请教
只有两个students子元素满足要求,但返回了所有的students子元素,能否只返回满足条件的子元素?
@taoerchun 你看下这个回答
http://stackoverflow.com/a/12241930
@jiangli373 用aggregate完美解决我的问题,果然是高手,应该经常逛stackoverflow吧