$objectToArray(对象转键值对数组)
最后更新:2026-10-09
$objectToArray(对象转键值对数组)
$objectToArray 把文档对象转换成键值对数组,每个元素形如 { k: '字段名', v: '字段值' }。典型场景是字段名是动态的(如不同用户的评分维度)时,用 $map/$filter 统一处理所有字段;也常用于把子文档摊平后做统计。参数必须是普通文档,传数组会报错;配合 $arrayToObject 可完成双向转换。
| 分类 | 数组 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $objectToArray: <对象> }
⚙️ 参数
| 对象 | 要转换的文档(BSON 对象)表达式。 |
|---|
返回值:键值对数组,元素形如 { k: '字段名', v: '值' };参数为 null 时返回 null
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $objectToArray:把评分子文档转成数组
db.users.aggregate([
{ $project: {
scores: { $objectToArray: '$scores' }
} }
])
运行结果:
{ '_id': 1, 'scores': [ { 'k': 'math', 'v': 90 }, { 'k': 'eng', 'v': 85 } ] }
📌 注意事项
- 结果元素的 k 固定是字符串字段名,v 是字段值
- 只能转换普通文档;传数组或标量会报错
- 字段顺序保留插入顺序;配合 $map/$filter 可统一处理动态字段
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q字段名是动态的怎么统一处理?
A先 $objectToArray 转成 k/v 数组,再用 $map 或 $filter 处理,最后可用 $arrayToObject 转回。
Q能转换数组吗?
A不能,参数必须是文档,数组会报错。
Q转换后字段顺序会变吗?
A保留原插入顺序。