目录
- 定义
- 行为
- 应用
- 向数组中插入元素
- 将指定数值插入多个文档的数组字段中
- 向数组中插入多个数值
- 在$push操作符中使用多个数组更新操作符
学习MongoDB,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第69篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。
定义
在update操作编程客栈中,使用$push操作符向数组中插入新的元素。按照下面的语法,使用$push操作符
{$push: {<field1>: <value1>, ...}}
当向嵌入式文档或数组中的数组字段插入元素时,使用点操作符。
行为
- 自mongo编程客栈db5.0开始,UPDATE操作按照字段名称的字典顺序更新字段。当字段中包含数字时,按照数字顺序依次更新字段。当然,对一个文档的多个字段操作,是原子性的。
- 使用$push向文档不存在的字段插入元素时,update操作向文档中插入该字段并将$push中的指定值赋给新增加的字段。
- 使用$push向非数组字段添加新的元素,数据更新操作会失败。
- 向指定字段使用$push插入数组时,Mongodb的数据更新操作将即将插入的数组作为整体,插入到目标数组当中。如果用户计划使用$push插入指定数组的每一个元素,需要使用$each操作符。
- mongodb 5.0版本以后,向$push传入空表达式({ })时,mongodb不再抛出错误。空表达式不会修改字段值 ,也不会在oplog中,添加新的操作记录。
- Mongodb提供了几个可以与$push搭配使用的数据操作符
操作符 | 描述 |
$each | 向指定数组一次性添加多个元素 |
$slice | 限制操作数组的容量,需要和$each操作符搭配使用 |
$sort | 对指定数组进行排序,需要和$each操作符搭配使用 |
$position | 指定新元素在数组中插入的位置,需要和$each操作符搭配使用。默认新的元素插入到数组的结尾 |
当执行$push操作时,当用户指定对数组排序或限制数组长度时,update按照下面的顺序执行$push操作。
应用
创建students集合并插入数据
db.students.insertOne({_id:1,scores: [44,78,38,80]})
向数组中插入元素
db.students.updateOne({_id:1},{$push: {scores: 89}})
将指定数值插入多个文档的数组字段中
向students集合插入新文档
db.students.insertMany([ {_id:2,scores: [45,78,38,80,89]}, {_id:3,scores: [46,78,38,80,89]}, {_id:4,scores: [47,78,38,80,89]}, ])
构建UPDATE语句,向students所有文档的scores字段插入新值95
db.students.updateMany({},{$push: {scores: 95}})
向数组中插android入多个数值
在$push中使用$each操作符,将多个值插入数组中。
db.students.updateOne({_id:1},{$push: {scores: {$each: [90, 92, 85]}}})
在$push操作符中使用多个数组更新操作符
向students集合中插入文档
db.students.insertMany([ {_id:5, quizzes: [ {wk:1, score: 10}, {wk:2, score: 8}, {wk:3, score: 5}, {wk:4, score: 6} ]} ])
构建数据更新语句,完成下面几个操作
- 使用$each操作符,向quizzes字段插入多个元素
- 按照score倒序将quizzes中的元素进行排列
- 使用$slice限制quizzes数组的容量,保留排序后前面3个元素
db.students.updateOne( {_id:5}, { $push: { quizzes: { $each: [ {wk:5, score: 8}, {wk:6, score: 7}, {wk:7, score: 6} python ], $sort: {score: -1}, http://www.devze.com $slice: 3 } } } )
到此这篇关于Mongodb在UPDATE操作中使用$push向数组中插入数据的方法的文章就介绍到这了,更多相关Mongodb使用$push向数组中插入数据内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论