$set(设置字段)
最后更新:2026-10-09
$set(设置字段)
$set 是 $addFields 的别名:给每个文档新增或覆盖字段,保留其余所有字段。用于在管道中途补充计算字段、常量或表达式结果。自 MongoDB 3.4 引入后与 $addFields 行为完全一致,两者可互换;与更新操作符 $set 同名,注意区分语境。
| 分类 | 核心阶段 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $set: { <字段>: <表达式>, ... } }
⚙️ 参数
| 字段 | 字段名映射为聚合表达式或常量值。 |
|---|
返回值:设置字段后的文档流
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $set:加常量状态并转换金额类型
db.orders.aggregate([
{ $set: { status: 'PENDING', amount: { $toDouble: '$amount' } } }
])
运行结果:
// 原字段保留,status 为常量,amount 转为 double
📌 注意事项
- $set 与 $addFields 完全等价
- 不改变 _id 和其他未提及的字段
- 同一阶段内不能引用刚设置的字段
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$set 和 $addFields 选哪个?
A两者等价,习惯上 $addFields 更常见;$set 与更新操作符同名易混淆。
Q$set 能设置内嵌字段吗?
A能,用点号路径,如 { $set: { 'addr.city': 'SH' } }。
Q$set 会删除字段吗?
A不会,它只新增或覆盖;删除字段要用 $unset。