📜  MongoDB - 所有位置运算符 ($[])

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

MongoDB - 所有位置运算符 ($[])

MongoDB 提供了不同类型的数组更新运算符来更新文档中数组字段的值,所有位置运算符($[])就是其中之一。此运算符指示更新操作应修改指定数组字段中存在的所有项目。
句法:

{ : { ".$[]" :  } }
  • 您还可以将此运算符用于那些遍历多个数组和嵌套数组的查询。
  • 如果 upsert 设置为 true,则查询必须在数组字段上包含完全相等的匹配,以便在更新语句中使用$[]运算符。如果 upsert 操作不包括数组字段上的完全相等匹配,则 upsert 将给出错误。
  • 您可以使用$[]运算符和 update()、findAndModify() 等方法来修改文档的所有数组项或匹配指定查询条件的文档。

更新数组中的所有项目:

在此示例中,我们通过将所有项目增加 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})