Docs 菜单

Docs 主页开发应用程序MongoDB Manual

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

以下操作指定-2 $position90,以便 在最后一个元素前两位的位置添加 ,然后在最后一个元素前两位的位置添加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
$slice →

在此页面上