MongoDB - $position 修饰符
MongoDB 提供了不同类型的数组更新运算符来更新文档中数组字段的值, $position
修饰符就是其中之一。此修饰符用于指定$push
运算符在数组中插入项目的位置。没有 $position 修饰符 $push运算符在数组末尾插入项目。
句法:
{
$push: {
: {
$each: [ , , ... ],
$position:
}
}
}
这里,
- 如果
的值(非负数对应从数组开头的数组)大于或等于数组的长度,则该修饰符不起作用, $push
操作添加项到数组的末尾。 - 从 MongoDB 3.6 版开始,
$position
修饰符接受负索引值。当的值为负时,$position 操作从数组的最后一个元素开始计数,但不包括最后一个元素。例如,如果 $position 修饰符的值为 -1,则表示数组中最后一项之前的位置,如果在 $each 数组中指定多个项,则最后添加的项位于从结束。如果 的值大于或等于数组的长度,则 $push 操作将项添加到数组的开头。 -
$position
修饰符必须与 $each 修饰符一起出现在 $push运算符。如果你使用没有 $each 修饰符的 $position 修饰符,那么你会得到一个错误。
在以下示例中,我们正在使用:
Database: GeeksforGeeks
Collection: contributor
Document: two documents that contain the details of the contributor in the form of field-value pairs.
在数组的开头添加项目:
在此示例中,我们在语言字段的开头(即位置 0)添加项目,即 [“C#”, “Perl”]。
db.contributor.update({name: "Rohit"},
{$push: { language: { $each: ["C#", "Perl"],
$position: 0}}})
将项目添加到数组的中间:
在这个例子中,我们在语言字段的中间(即位置 2)添加项目,即 [“Perl”]。
db.contributor.update({name: "Suman"},
{$push: { language: { $each: [ "Perl"],
$position: 2}}})
使用负索引向数组添加项目:
在这个例子中,我们在语言字段中的最后一个项目之前添加项目,即 [“C”]。
db.contributor.update({name: "Rohit"},
{$push: { language: { $each: [ "C"],
$position: -1}}})