MongoDB - 所有位置运算符 ($[])
MongoDB 提供了不同类型的数组更新运算符来更新文档中数组字段的值,所有位置运算符($[])就是其中之一。此运算符指示更新操作应修改指定数组字段中存在的所有项目。
句法:
{ : { ".$[]" : } }
- 您还可以将此运算符用于那些遍历多个数组和嵌套数组的查询。
- 如果 upsert 设置为 true,则查询必须在数组字段上包含完全相等的匹配,以便在更新语句中使用
$[]
运算符。如果 upsert 操作不包括数组字段上的完全相等匹配,则 upsert 将给出错误。 - 您可以使用
$[]
运算符和 update()、findAndModify() 等方法来修改文档的所有数组项或匹配指定查询条件的文档。
In the following examples, we are working with:
Database: GeeksforGeeks
Collection: contributor
Document: two documents that contain the details of the contributor in the form of field-value pairs.
更新数组中的所有项目:
在此示例中,我们通过将所有项目增加 10 个点字段来进行更新。
db.contributor.update({}, {$inc: {"points.$[]": 5}}, {multi: true})
更新数组中的所有文档:
在此示例中,我们通过将文章数组中的所有项目的 tArticles 字段的值递减 -10 来进行更新。
db.contributor.update({}, {$inc: {"articles.$[].tArticles": -10}},
{multi: true})
使用否定查询运算符更新数组:
在这个例子中,我们将所有文档的点数组中的所有项目都增加 20,除了点数组中值为 100 的那些。
db.contributor.update({points: {$ne: 25}},
{$inc: {"points.$[]": 20}},
{multi: true})
结合 $[< identifier>] 更新嵌套数组:
在此示例中,我们将更新嵌套的marks.firstsemester 数组中小于或等于80 的所有值。
db.contributor.update({}, {$inc: {"marks.$[].firstsemester.$[newmarks]": 3}},
{arrayFilters: [{newmarks: {$lte: 80}}], multi: true})