$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 ] } )
以下操作指定 -2
以便 $position
在最后一个元素前两位的位置添加 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 ] }