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

3

你能否获取集合中文档对象的所有键和值?

我的 MongoDB 集合结构如下:

[{
    _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']
}
]

你可以使用Map-Reduce来实现这个功能。 - chridam
2个回答

1

我认为你没有其他选择,只能在客户端进行处理才能实现你的结果。不过,你可以尝试使用聚合框架来仅使用单个查询实现类似于你所需输出的内容。

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

0

另一个选项是为每个字段运行distinct()

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接