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

$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 ] }
给本页内容打分

在此页面上