我有一个动态填充的表格,其中的文档可以包含事先不知道的不同密钥:
文件1
{
'attribute1': 'foo',
'attribute2': 'bar'
}
文件2
{
'attribute1': 'foo',
'attribute3': 'baz'
}
如何获取所有文档中存在的所有属性的列表?
attribute1
attribute2
attribute3
我尝试按keys()
进行分组,但我得到了可能的属性组合列表,而不是单个键。
答案 0 :(得分:0)
速度很慢,但你可以写table.concatMap(function(row) { return row.keys(); }).distinct()
。
答案 1 :(得分:0)
我不确定是否有比O(n)(?)更有效的解决方案,除非您通过每次数据更新更新一些自定义元数据,但无论如何,我想我会去
table.reduce(function(left, right) {
return left.merge(right)
}).keys()
答案 2 :(得分:0)
虽然如果你有很多文档,这还不够快,但它最终会完成并且不会占用大量内存:
r.table('table')
.map(r.row.keys())
.reduce(function(left, right) {
return left.setUnion(right)
})
答案 3 :(得分:0)
您只需创建类型为multi的二级索引:
r.table('foo').indexCreate('all_keys', function(d){
return d.without('id').keys()
}, {multi: true})
要获得所有密钥,只需运行:
r.table('foo').distinct({index: 'all_keys'})
Voila; - )