mongodb - 需要从 mongodb 中的对象获取所有密钥
问题描述
我有以下格式的数据
[
{ _id: ObjectId, spec: { abc: 'abc', bcd: 'bcd', cde: 'cde' } },
{ _id: ObjectId, spec: { bcd: 'bcd', cde: 'cde', efg: 'efg' } },
{ _id: ObjectId, spec: { cde: 'cde', efg: 'efg', ghi: 'ghi' } },
{ _id: ObjectId, spec: { ghi: 'ghi', abc: 'abc', bcd: 'bcd' } }
];
我需要spec
使用这样的聚合从所有对象中获取对象中的所有键。
['abc','bcd','cde','efg','ghi']
解决方案
$objectToArray
spec
以键值格式将对象转换为数组$unwind
解构spec
数组$group
spec
通过 null 并使用构造对象键的唯一数组$addToSet
db.collection.aggregate([
{ $project: { spec: { $objectToArray: "$spec" } } },
{ $unwind: "$spec" },
{
$group: {
_id: null,
spec: { $addToSet: "$spec.k" }
}
}
])
推荐阅读
- javascript - 为什么HTML拖放数据传输成为iframe内部的对象
- amazon-web-services - terraform apply 试图破坏手动删除的启动配置
- angular - 如何在Angular中动态呈现markdown文件?
- glob - Glob 用于除单个文件夹外的所有文件扩展名
- c# - 如何在没有数据测试入口点的情况下测试服务
- networking - UNC 路径故障排除
- django - Django Channels 或 StreamingHttpResponse 是否满足我的需求?
- excel-formula - 生成随机电话号码
- git - 如果 master 有此分支的还原,则从 master 重新设置一个分支
- c++ - 使用 SDL_PollEvent 与 SDL_PumpEvents