MongoDB $pullAll 运算符介绍

Mongodb 中的 $pullAll 运算符用于从数组中删除所有与指定值匹配的元素。与 $pull 运算符类似,但 $pull 仅删除一个匹配项,而 $pullAll 可以删除多个匹配项。

语法

$pullAll 运算符的语法如下:

{ $pullAll: { <field1>: [ <value1>, <value2>, ... ], ... } }

其中,<field> 是需要进行操作的数组字段名,<value> 是需要从该数组中删除的值。可以在同一操作中使用多个字段。

使用场景

$pullAll 运算符适用于需要删除数组中多个匹配项的情况。例如,一个文档包含一个用户的朋友列表,用户希望从列表中删除多个朋友。使用 $pullAll 运算符可以轻松地删除所有指定的朋友。

示例

假设有一个名为 users 的集合,其中包含以下文档:

{
    _id: 1,
    friends: ['Alice', 'Bob', 'Charlie', 'David', 'Emily']
}

现在用户决定删除 BobDavidEmily 这三个朋友,可以使用以下命令:

db.users.update(
  { _id: 1 },
  { $pullAll: { friends: ["Bob", "David", "Emily"] } }
)

执行上述命令后,friends 数组中的值将变为 ['Alice', 'Charlie']。因为 $pullAll 运算符可以一次性删除多个匹配项,所以非常适合这种情况。

接下来,假设我们有一个名为 students 的集合,其中包含以下文档:

{
    _id: 1,
    grades: [
        { grade: 'A', score: 95 },
        { grade: 'B', score: 80 },
        { grade: 'C', score: 70 },
        { grade: 'A', score: 90 }
    ]
}

现在,我们想要从 grades 数组中删除所有分数低于 80 分的文档。可以使用以下命令:

db.students.update(
  { _id: 1 },
  {
    $pullAll: {
      grades: [
        { grade: "B", score: 80 },
        { grade: "C", score: 70 }
      ]
    }
  }
)

执行上述命令后,grades 数组中的值将变为:

    { grade: 'A', score: 95 }
    { grade: 'A', score: 90 }

结论

$pullAll 运算符可以方便地从数组中删除多个匹配项,适用于需要删除多个值的情况。