$getField(动态取字段)
最后更新:2026-10-09
$getField(动态取字段)
$getField按字面字段名从文档中取值,字段名即使以$开头或含特殊字符也不会被当作字段路径解析。语法为{ $getField: { field: 字段名, input: 文档 } },input缺省为$$CURRENT。常用于动态字段名、字段名含特殊字符的文档等场景。字段不存在时返回null。相比直接写'$field',$getField更灵活但代码略长。
| 分类 | 字面·变量·对象 |
|---|---|
| MongoDB 版本 | 5.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $getField: { field: <字段名>, input: <文档表达式> } }
⚙️ 参数
| field | 要取的字段名字符串或解析为字符串的表达式。 |
|---|---|
| input | 可选,目标文档,缺省为$$CURRENT。 |
返回值:字段的值;字段不存在或input为null时返回null
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $getField:按字段名从当前文档取值
db.orders.aggregate([
{ $project: {
price: { $getField: { field: 'price', input: '$$CURRENT' } }
} }
])
运行结果:
{ '_id': 1, 'price': 199 }
{ '_id': 2, 'price': 59 }
📌 注意事项
- 字段名以$开头时不会解析为路径,按字面名查找
- input缺省为$$CURRENT
- 字段不存在返回null,可与$ifNull配合
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$getField和直接写$字段有什么区别?
A直接写会把点与$解析成路径,$getField按字面字段名查找,支持特殊字符与动态名称。
Q$getField能取含点的字段名吗?
A能,字段名按字面处理,不会拆成嵌套路径。
Q$getField的input不传会怎样?
A缺省为$$CURRENT,即当前文档。