$pull(按条件移除)
最后更新:2026-10-09
$pull(按条件移除)
$pull 从数组中移除所有等于指定值或满足指定条件的元素。`{ $pull: { tags: 'spam' } }` 移除所有 spam;条件写法 `{ $pull: { scores: { $lt: 60 } } }` 移除所有低于 60 的分数。移除的是全部匹配元素而非单个,是数组清洗的常用工具。
| 分类 | 更新数组 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $pull: { <数组字段>: <值> | <条件> } }
⚙️ 参数
| 数组字段 | 要清理的数组字段名。 |
|---|---|
| 值或条件 | 等值或查询条件,如 'spam' 或 { $lt: 60 }。 |
返回值:更新结果文档
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $pull:移除所有 spam 标签
db.articles.updateOne(
{ _id: 1 },
{ $pull: { tags: 'spam' } }
)
// 按条件移除低于 60 的分数
db.students.updateOne(
{ _id: 1 },
{ $pull: { scores: { $lt: 60 } } }
)
运行结果:
// tags 中的 spam 全部移除;scores 中低于 60 的分数全部移除
📌 注意事项
- 移除所有匹配元素,不是单个
- 条件可写操作符表达式($lt、$in、$gt 等)
- 数组元素为文档时可按字段条件匹配
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$pull 和 $pop 的区别?
A$pull 按值/条件移除任意位置的元素;$pop 只能移除首尾元素。
Q$pull 能按条件移除吗?
A能,条件支持查询操作符,如 { $pull: { scores: { $lt: 60 } } }。
Q$pull 会移除所有匹配还是只一个?
A所有匹配元素都会移除。