rmdir.cn

数组更新操作符

数组字段更新操作

语法

{ $operator: { <field>: <value> } }

说明

MongoDB 提供丰富的数组操作符用于更新文档中的数组字段。$push 追加元素,$pull 移除匹配元素,$addToSet 去重追加,$pop 移除首尾元素,$elemMatch 匹配数组中的嵌套文档。

参数

  • $push

    向数组末尾追加元素

  • $pull

    移除数组中匹配的元素

  • $addToSet

    去重追加,元素不存在才添加

  • $pop

    移除数组第一个(-1)或最后一个(1)元素

  • $pullAll

    移除数组中所有匹配值

  • $each

    配合 $push/$addToSet 批量添加

  • $slice

    配合 $push 限制数组长度

  • $sort

    配合 $push 对数组排序

  • $elemMatch

    匹配数组中嵌套文档的多条件

示例

$push 追加

向 tags 数组追加元素

db.articles.updateOne({ _id: id }, { $push: { tags: "mongodb" } })

$addToSet 去重

仅当标签不存在时添加

db.articles.updateOne({ _id: id }, { $addToSet: { tags: "featured" } })

$pull 移除

移除数组中特定标签

db.articles.updateOne({ _id: id }, { $pull: { tags: "deprecated" } })

$push + $each + $slice

追加并保持最多 5 条最近记录

db.users.updateOne({ _id: uid }, { $push: { recentSearches: { $each: ["new"], $slice: -5 } } })

$elemMatch 查询数组文档

查询至少一份成绩超过 90 分的学生

db.students.find({ scores: { $elemMatch: { subject: "math", score: { $gte: 90 } } } })