对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

$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 字段,将元素 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 ] }
给本页内容打分

在此页面上