📜  MongoDB – 位置运算符 ($)

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

MongoDB – 位置运算符 ($)

MongoDB 提供了不同类型的数组更新运算符来更新文档中数组字段的值,位置运算符( $ ) 就是其中之一。此运算符识别数组中要更新的元素,而无需明确指定该项目在数组中的位置。

句法:

{ ".$" : value }
  • 不能将$运算符用于 upsert 操作。如果将 $运算符与 upsert 操作一起使用,则插入操作将使用 $ 作为插入文档中的字段名称。
  • 此运算符不能用于那些遍历多个数组的查询,因为$占位符的替换是单个值。
  • 当您使用$运算符$未设置运算符,那么$运算符不从数组中删除匹配的项目,而是将其设置为空。
  • 当查询在 $not、$ne 或 $nin 等否定运算符的帮助下匹配数组时,您不能使用$运算符来更新该数组的值。如果查询的否定部分存在于 $elemMatch 表达式中,那么您可以使用位置$运算符来更新此字段。
  • 当您将此运算符与db.collection.update()db.collection.findAndModify()等更新操作一起使用时, $运算符符将用作与查询文档匹配的第一个项目的占位符,并且需要使用数组字段作为查询文档的一部分出现。

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



使用$运算符更新数组中的值:

在这个例子中,我们在$运算符的帮助下将语言字段中值为“ Python ”的第一个项目更新为“Ruby”,因为我们不知道该项目在数组中的位置。

db.contributor.updateOne({name: "Rohit", language: "Python"}, 
                         {$set: {"language.$": "Ruby"}})

在这里, $运算符符用作更新查询文档的第一个匹配项的占位符。

注意:数组字段必须是查询的一部分。

使用$运算符更新数组中的文档:

在这个例子中,我们在$运算符的帮助下更新一个包含嵌入文档的数组,并使用点表示法访问嵌入的文档字段。或者换句话说,我们正在将 tArticle 字段的值从 60 更新为 100。

db.contributor.updateOne({name: "Rohit", "articles.language": "C#"}, 
                         {$set: {"articles.$.tArticles": 100}})

使用多个字段匹配更新嵌入的文档:

在此示例中,我们将更新第一个嵌入文档中 tArticles 字段的值,该文档的 pArticles 字段的值大于 90。

db.contributor.updateOne({name: "Sumit", articles: {$elemMatch:
                                          {pArticles: {$gt: 30}}}},
                             {$set: {"articles.$.tArticles": 200}})