文档菜单
文档首页
/
MongoDB 手册
/ / / /

$position

本页内容

  • 定义
  • 行为
  • 示例
$position

$position修饰符指定了$push运算符插入元素的位置。如果没有$position修饰符,则$push运算符将元素插入到数组的末尾。有关更多信息,请参阅$push修饰符

要使用$position修饰符,它必须与$each修饰符一起出现。

{
$push: {
<field>: {
$each: [ <value1>, <value2>, ... ],
$position: <num>
}
}
}

<num>表示数组的索引位置,基于零基索引(位置)

  • 一个非负数对应于数组的起始位置。如果<num>的值大于或等于数组的长度,则$position修饰符不起作用,并且$push将元素添加到数组的末尾。

  • 负数对应数组中的位置,从数组的最后一个元素(不包括)开始计数。例如,-1 表示数组中最后一个元素之前的位置。如果您在 $each 数组中指定多个元素,则最后添加的元素位于从末尾指定的位置。如果 <num> 的绝对值大于或等于数组的长度,则 $push 将元素添加到数组的开头。

从 MongoDB 5.0 开始,更新运算符按字母顺序处理以字符串命名的文档字段。具有数字命名的字段按数字顺序处理。有关详细信息,请参阅 更新运算符行为

创建 students 集合

db.students.insertOne( { "_id" : 1, "scores" : [ 100 ] } )

以下操作将 scores 字段更新为在数组开头添加元素 506070

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 处添加元素 2030

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 ] }

返回

$each

本页内容