在MongoDB中使用聚合查询获取所有文档spec对象的全部不重复键
MongoDB聚合提取spec字段所有去重键方案
实现逻辑
利用MongoDB内置的$objectToArray操作符将嵌套对象转换为键值对数组,再拆分、去重即可得到所有不重复的键名。
完整聚合代码
db.你的集合名.aggregate([ // 将spec对象转换为[{k: '键名', v: '对应值'}]结构的数组 { $project: { specKeyList: { $objectToArray: "$spec" } } }, // 把数组中的每一项拆分为独立记录 { $unwind: "$specKeyList" }, // 全局收集所有键名,自动去重 { $group: { _id: null, result: { $addToSet: "$specKeyList.k" } } }, // 可选:对结果数组按字母顺序排序,不需要可删除该阶段 { $project: { _id: 0, result: { $sortArray: { input: "$result", sortBy: 1 } } } } ])
输出示例
执行后得到的结果结构如下,直接取result字段即可得到你需要的数组:
{ "result" : [ "abc", "bcd", "cde", "efg", "ghi" ] }
内容的提问来源于stack exchange,提问作者Hemant Rajpoot
相关产品推荐
相关产品推荐

