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