mongodb是否可以获取集合中文档中对象的所有键和值?

时间:2015-05-27 13:51:17

标签: mongodb

是否可以获取集合中文档中对象的所有键和值?

我在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']
}
]

2 个答案:

答案 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()

请参阅文档页面中的示例输出。