是否可以获取集合中文档中对象的所有键和值?
我在mongo db中有一个像
这样的结构的集合[{
_id: '55534c2e2750b4394debedd2',
selected_options: {
name: 'test',
size: 'S',
color: 'red'
}
},
{
_id: '55534c2e2750b4394debedd3',
selected_options: {
name: 'test2',
size: 'S',
color: 'red'
}
},
{
_id: '55534e087f01fa2a4d30f7f5',
selected_options: {
name: 'test3',
size: 'm',
color: 'green'
}
}
........
]
我怎样才能获得如下输出:
[{
name: 'name',
values: ['test', 'test2', 'test3']
},
{
name: 'size',
values: ['S', 'm']
},
{
name: 'color',
values: ['red', 'green']
}
]
答案 0 :(得分:1)
我认为如果不在客户端进行处理,您无法获得结果。但是,只需一次查询,您就可以尝试使用Aggregation Framework来实现类似于所需输出的内容。
db.yourCollection.aggregate([
{$group:
{
_id: null,
names: {$addToSet: '$selected_options.name'},
sizes: {$addToSet: '$selected_options.size'},
colors: {$addToSet: '$selected_options.color'},
}
},
{$project:
{_id: 0, names: 1, colors: 1, sizes: 1}
}
])
这将输出以下内容:
{
names: ['test', 'test2', 'test3'],
sizes: ['S', 'm'],
colors: ['red', 'green']
}
答案 1 :(得分:0)
另一个选择是为每个字段运行distinct()。
请参阅文档页面中的示例输出。