MongoDB - $push 操作符
MongoDB 提供了不同类型的数组更新运算符来更新文档中数组字段的值, $push
运算符就是其中之一。此运算符用于将指定值附加到数组。
句法:
{ $push: { : , ... } }
在这里,
- 如果
$push
运算符的指定字段在文档中不存在,则此运算符将添加具有值的数组字段作为其项。 -
$push
运算符在数组末尾插入项目。 - 如果
$push
运算符的指定字段不是数组,则此操作将失败。 - 如果
$push
运算符的值是一个数组,则此运算符会将整个数组作为单个元素附加。如果您想单独添加值的每个项目,那么您可以将 $each 修饰符与$push
运算符。 - 您可以根据需要将此运算符与 update()、findAndModify() 等方法一起使用。
我们还可以将以下修饰符与 $push运算符:
句法:
{ $push: { : { : , ... }, ... } }
带有修饰符的推送操作的处理按以下顺序进行:
- 首先更新数组以在正确位置添加项目。
- 其次,如果指定,则应用排序。
- 如果指定,则对数组进行第三次切片。
- 第四存储数组。
注意:此处修饰符在 $push运算符中出现的顺序无关紧要。
Modifier | Description |
---|---|
$each | It is used to append multiple values to the array field. |
$slice | It is used to limit the number of array items and require the use of the $each modifier. |
$sort | It is used to order items of the array and require the use of the $each modifier. |
$position | It 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. |
在以下示例中,我们正在使用:
Database: GeeksforGeeks
Collection: contributor
Document: two documents that contain the details of the contributor in the form of field-value pairs.
将单个值附加到数组:
在此示例中,我们将单个值,即“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 修饰符用于仅保留语言数组的前四个排序项。