定义
在update操作中,使用$push操作符向数组中插入新的元素。按照下面的语法,使用$push操作符{$push: {<field1>: <value1>, ...}}
当向嵌入式文档或数组中的数组字段插入元素时,使用点操作符。
行为
自mongodb5.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}})
向数组中插入多个数值
在$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}
],
$sort: {score: -1},
$slice: 3
}
}
}
)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。