📜  MongoDB - $position 修饰符

📅  最后修改于: 2022-05-13 01:56:58.282000             🧑  作者: Mango

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 修饰符,那么你会得到一个错误。

在以下示例中,我们正在使用:

在数组的开头添加项目:

在此示例中,我们在语言字段的开头(即位置 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}}})