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 以便 $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 ] }

后退

$each

在此页面上