如何将子文档转换为字段名数组?MongoDB聚合实现方案
MongoDB聚合中获取对象键的方法
MongoDB 4.4及以上版本:直接用
$keys操作符
这个操作符和JavaScript里的Object.keys()功能完全对应,能直接提取对象的键组成数组。
假设有文档:{ data: { A: 1, B: 2 } },对应的聚合管道示例:db.collection.aggregate([ { $project: { keys: { $keys: "$data" } } } ])执行后会输出包含
keys: ["A", "B"]的结果文档。MongoDB 3.4至4.2版本:通过
$objectToArray提取
先使用$objectToArray将目标对象转换为{ k: 键名, v: 键值 }结构的数组,再提取所有k字段即可:
分步实现的管道:db.collection.aggregate([ { $project: { keyArray: { $objectToArray: "$data" } } }, { $project: { keys: "$keyArray.k" } } ])也可以用
$map一步完成转换:db.collection.aggregate([ { $project: { keys: { $map: { input: { $objectToArray: "$data" }, in: "$$this.k" } } } } ])两种写法最终都能得到和
Object.keys()一致的键数组结果。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

