如何获取RethinkDB表中所有文档的所有键列表?

时间:2016-01-29 19:13:32

标签: rethinkdb

我有一个动态填充的表格,其中的文档可以包含事先不知道的不同密钥:

文件1

{
 'attribute1': 'foo',
 'attribute2': 'bar'
}

文件2

{
 'attribute1': 'foo',
 'attribute3': 'baz'
}

如何获取所有文档中存在的所有属性的列表?

attribute1
attribute2
attribute3

我尝试按keys()进行分组,但我得到了可能的属性组合列表,而不是单个键。

4 个答案:

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