📜  MongoDB - $push 操作符

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

MongoDB - $push 操作符

MongoDB 提供了不同类型的数组更新运算符来更新文档中数组字段的值, $push运算符就是其中之一。此运算符用于将指定值附加到数组。

句法:

{ $push: { : , ... } }

在这里, 可以在嵌入/嵌套文档或数组中用点表示法指定。

  • 如果$push运算符的指定字段在文档中不存在,则此运算符将添加具有值的数组字段作为其项。
  • $push运算符在数组末尾插入项目。
  • 如果$push运算符的指定字段不是数组,则此操作将失败。
  • 如果$push运算符的值是一个数组,则此运算符会将整个数组作为单个元素附加。如果您想单独添加值的每个项目,那么您可以将 $each 修饰符与$push 运算符。
  • 您可以根据需要将此运算符与 update()、findAndModify() 等方法一起使用。

我们还可以将以下修饰符与 $push运算符:
句法:

{ $push: { : { : , ... }, ... } }

带有修饰符的推送操作的处理按以下顺序进行:



  • 首先更新数组以在正确位置添加项目。
  • 其次,如果指定,则应用排序。
  • 如果指定,则对数组进行第三次切片。
  • 第四存储数组。

注意:此处修饰符在 $push运算符中出现的顺序无关紧要。

ModifierDescription
$eachIt is used to append multiple values to the array field.
$sliceIt is used to limit the number of array items and require the use of the $each modifier.
$sortIt is used to order items of the array and require the use of the $each modifier.
$positionIt is used to specify the location in the array at which to insert the new items and require the use of the $each modifier. If the $push operator does not use $position modifier, then this operator will append the items to the end of the array.

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

将单个值附加到数组:

在此示例中,我们将单个值,即“C++”附加到数组字段,即满足条件(名称:“Rohit”)的文档中的语言字段。

db.contributor.update({name: "Rohit"}, {$push: {language: "C++"}})

将多个值附加到数组:

在这个例子中,我们将多个值,即[“C”,“Ruby”,“Go”] 附加到一个数组字段,即满足条件(名称:“Sumit”)的文档中的语言字段。

db.contributor.update({name: "Sumit"}, {$push: {language: {$each: ["C", "Ruby", "Go"]}}})

将多个值附加到嵌套/嵌入文档中的数组:

在这个例子中,我们将多个值,即 [89, 76.4] 附加到数组字段,即嵌套/嵌入文档的个人.semesterMarks 字段。

db.contributor.update({name: "Sumit"}, 
                      {$push: {"personal.semesterMarks": {$each: [89, 76.4]}}})

将修饰符与 $push运算符:

在这个例子中,我们使用了多个修饰符,如 $each、$sort 和 $slice 以及 $push运算符。

db.contributor.update({name: "Rohit"},
                      {$push: { language: { $each: ["C", "Go"],
                                $sort: 1, $slice: 4}}})

这里,

  • $each 修饰符用于将多个文档添加到语言数组中。
  • $sort 修饰符用于对修改后的语言数组的所有项进行升序排序。
  • $slice 修饰符用于仅保留语言数组的前四个排序项。