如何使用mongo shell更新一个数组中的所有元素?

oliseh 2017-12-29 04:31:20
pradb>db.t1226_1.find()
{ "_id" : 1, "grades" : [ 95, 92, 90 ] }
{ "_id" : 2, "grades" : [ 98, 100, 102 ] }
{ "_id" : 3, "grades" : [ 95, 110, 100 ] }

pradb>db.t1226_1.find({grades:{$gte:100}});
{ "_id" : 2, "grades" : [ 98, 100, 102 ] }
{ "_id" : 3, "grades" : [ 95, 110, 100 ] }

***如果要把上述数组中>=100的元素都更新成333,可以采用如下命令,但从结果看只能更新每个文档中第一个>=100的元素
pradb>db.t1226_1.update({grades:{$gte:100}},{$set:{"grades.$":333}},{multi:true})
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

pradb>db.t1226_1.find()
{ "_id" : 1, "grades" : [ 95, 92, 90 ] }
{ "_id" : 2, "grades" : [ 98, 333, 102 ] } <---只更新了每个文档中第一个满足条件的元素
{ "_id" : 3, "grades" : [ 95, 333, 100 ] }

如果要同时更新所有>=100的元素,使用什么方法可以实现呢?
...全文
834 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
crynono 2018-03-07
  • 打赏
  • 举报
回复
https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/ 官方文档里面给了方法,验证成功,给分吧 db.t1226_1.update( { }, { $set: { "grades.$[element]" : 333} }, { multi: true, arrayFilters: [ { "element": { $gte: 100 } } ] } )

1,798

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧