$position
定义
行为
从 MongoDB 5.0 开始,更新运算符按字母顺序处理以字符串命名的文档字段。具有数字命名的字段按数字顺序处理。有关详细信息,请参阅 更新运算符行为。
示例
在数组开头添加元素
创建 students
集合
db.students.insertOne( { "_id" : 1, "scores" : [ 100 ] } )
以下操作将 scores
字段更新为在数组开头添加元素 50
、60
和 70
db.students.updateOne( { _id: 1 }, { $push: { scores: { $each: [ 50, 60, 70 ], $position: 0 } } } )
操作结果如下更新后的文档
{ "_id" : 1, "scores" : [ 50, 60, 70, 100 ] }
在数组中间添加元素
向 students
集合添加文档
db.students.insertOne( { "_id" : 2, "scores" : [ 50, 60, 70, 100 ] } )
以下操作将 scores
字段更新为在数组索引(位置)2
处添加元素 20
和 30
db.students.updateOne( { _id: 2 }, { $push: { scores: { $each: [ 20, 30 ], $position: 2 } } } )
操作结果如下更新后的文档
{ "_id" : 2, "scores" : [ 50, 60, 20, 30, 70, 100 ] }
使用负数组索引(位置)向数组添加元素
$position
可以接受一个负数组索引(位置)值,以指示从数组最后一个元素开始计数的位置(不包括最后一个元素)。例如,-1
表示数组中最后一个元素之前的位置。
向 students
集合添加以下文档
db.students.insertOne( { "_id" : 3, "scores" : [ 50, 60, 20, 30, 70, 100 ] } )
以下操作将 $position
指定为 -2
,以在最后一个元素前两个位置添加 90
,然后在该位置前添加 80
。
重要
如果使用负的数组索引(位置),在 $each
数组中指定多个元素,则最后添加的元素位于从末尾开始的指定位置。
db.students.updateOne( { _id: 3 }, { $push: { scores: { $each: [ 90, 80 ], $position: -2 } } } )
操作结果如下更新后的文档
{ "_id" : 3, "scores" : [ 50, 60, 20, 30, 90, 80, 70, 100 ] }