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

📅  最后修改于: 2023-12-03 15:03:00.965000             🧑  作者: Mango

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

在 MongoDB 中,所有位置运算符 ($[]) 可以用来更新嵌套数组中的所有元素,或者查询嵌套数组中所有满足条件的元素。

语法

所有位置运算符 ($[]) 的基本语法如下:

{ <array>: { $[]: <update> } }

其中, 指定要进行操作的嵌套数组的字段名; 是一个更新操作对象,可以包含任意数量的更新操作。

例如,对于一个包含嵌套数组的文档:

{
  "_id": 1,
  "grades": [
    {
      "grade": 80,
      "mean": 75,
      "std": 8
    },
    {
      "grade": 85,
      "mean": 90,
      "std": 5
    }
  ]
}

如果想要对 grades 数组中的所有文档中的 grade 字段进行加 5 操作,可以使用所有位置运算符 ($[]):

db.scores.update(
   {},
   { $inc: { "grades.$[].grade" : 5 } }
)

在这个示例中,我们将所有匹配条件的文档(这里使用了空对象 {})中 grades 数组中的所有文档的 grade 字段进行了加 5 操作。

用法示例

除了用于更新操作,所有位置运算符 ($[]) 也可以用于查询操作。例如,如果需要查询嵌套数组中所有满足条件的元素,可以使用以下语法:

db.scores.find(
   { "grades.$[].mean" : { $gt:90 } }
)

在这个示例中,我们使用了所有位置运算符 ($[]) 来匹配 grades 数组中所有文档中的 mean 字段,并使用条件 $gt:90 来筛选出所有 mean 字段大于 90 的元素。

注意事项
  • 所有位置运算符 ($[]) 的使用必须在更新操作或者查询操作中使用。
  • 所有位置运算符 ($[]) 会将嵌套数组中的每个元素都作为一个独立的元素来处理,因此使用时需要格外小心。
  • 所有位置运算符 ($[]) 在 MongoDB 3.6 中引入,如果你的 MongoDB 版本低于 3.6,将无法使用该操作符。