如何在没有group和reduction字段的情况下在RethinkDB中创建组函数的可读结果?

时间:2015-07-13 08:31:39

标签: rethinkdb reql

我有一个使用group()函数的查询:

...group('a','b','c','na').count()

现在结果是以 group reduction 的形式返回,如下所示:

enter image description here

如何在没有组的情况下获得结果并以

的形式减少
{
"na": 1285
"c" : 487
"b" : 746
"a" : 32
}

1 个答案:

答案 0 :(得分:1)

我不确定,但我认为你误解了群体做了什么。

group命令接受属性并按该属性对文档进行分组。因此,例如,如果您想按a属性对文档进行分组,那么看起来像这样:

{
  a: 1
}, {
  a: 1
}, {
  a: 1
}, {
  a: 2
}

然后您将运行以下查询:

r.table(...).group('a').count().ungroup()

哪会导致:

[
  {
    "group": 1 ,
    "reduction": 3
  },
  {
    "group": 2 ,
    "reduction": 1
  }
]

通过将多个参数传递给group,您告诉它为所有这些属性创建不同的组。所以你有以下文件:

  [ {
    a: 1, b: 1
  }, {
    a: 1, b: 1
  }, {
    a: 1, b: 2
  }, {
    a: 2, b: 1
  }]

您可以按ab分组:

r.table(...).group('a', 'b').count().ungroup()

您将获得以下结果:

[{
  "group": [ 1 , 1 ] ,
  "reduction": 2
},
{
  "group": [ 1 , 2 ] ,
  "reduction": 1
},
{
  "group": [ 2 , 1 ] ,
  "reduction": 1
}]

您的答案

因此,当您执行.group('a','b','c','na').count()时,您将按这4个属性对它们进行分组。如果您想要以下结果:

{
"na": 1285
"c" : 487
"b" : 746
"a" : 32
}

然后你的文件应该是这样的:

[{
  property: 'a'
}, {
  property: 'c'
}, {
  property: 'na'
}, 
...
]

然后你会按照以下方式对它们进行分组:

r.table(...).group('property').count().ungroup()