$each(批量元素)
最后更新:2026-10-09
$each(批量元素)
$each 为 $push 和 $addToSet 提供多个待添加元素。`{ $push: { tags: { $each: ['a', 'b', 'c'] } } }`。$addToSet 配合 $each 时逐个去重添加。它不能单独使用,必须内嵌在 $push 或 $addToSet 中,也可与 $position、$slice、$sort 组合实现复杂的数组维护。
| 分类 | 更新修饰器 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $push: { <数组字段>: { $each: [ <值1>, <值2>, ... ] } } }
⚙️ 参数
| 数组字段 | 要追加元素的数组字段名。 |
|---|---|
| 值数组 | 待添加的元素列表。 |
返回值:更新结果文档
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $each:批量追加标签
db.articles.updateOne(
{ _id: 1 },
{ $push: { tags: { $each: ['mongodb', 'database'] } } }
)
// $addToSet 配合 $each 去重添加
db.articles.updateOne(
{ _id: 1 },
{ $addToSet: { tags: { $each: ['database', 'nosql'] } } }
)
运行结果:
// tags 追加两个值;第二次添加时 database 已存在则跳过,仅添加 nosql
📌 注意事项
- 只能内嵌于 $push 或 $addToSet
- $addToSet 配合 $each 逐个去重
- 可组合 $position、$slice、$sort
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$each 能单独使用吗?
A不能,必须写在 $push 或 $addToSet 内部。
Q$addToSet 加 $each 怎么去重?
A每个值逐个判断,已存在则跳过,保证最终无重复。
Q$each 能配合 $sort 吗?
A能,$push 内 $each 后跟 $sort 会在追加后排序。