RethinkDB分组和定义输出

时间:2015-06-13 14:54:09

标签: rethinkdb

我有一个包含与此类似的文档的表:

{
"title": "title 2",
"content": "This far, no further!",
"category": "Fiction"
}

这是我正在使用的查询:

r.table('posts').group('title').map(lambda item:
    {'items': item['title']}
).run())

这是输出:

{
  "title 1" : [
    {
      "items" : "title 1"
    },
    {
      "items" : "title 1"
    }
  ],
  "Title 2" : [
    {
      "items" : "Title 2"
    },
    {
      "items" : "Title 2"
    },
    {
      "items" : "Title 2"
    },
    {
      "items" : "Title 2"
    }
  ],
  "title 3" : [
    {
      "items" : "title 3"
    }
  ]
}

但是我希望得到一个如下所示的输出结构:

{
  "Title 1" : {
    "item_count" : 3,
    "items" : [
      {
        "items" : "title 1"
      },
      {
        "items" : "title 1"
      },
      {
        "items" : "title 1"
      }
    ]
  },
  "Title 2" : {
    "item_count" : 2,
    "items" : [
      {
        "items" : "title 2"
      },
      {
        "items" : "title 2"
      }
    ]
  },
  "Title 3" : {
    "item_count" : 1,
    "items" : [
      {
        "items" : "title 3"
      }
    ]
  }
}

如何创建查询以获得此结果。

1 个答案:

答案 0 :(得分:0)

为此,您需要在map中执行ungroup后查询map

首先,您的第一个查询的输出看起来不正确。 RethinkDB在[ { "group": "title 1" , "reduction": [ { "items": "title 1" } , { "items": "title 1" } ] } , { "group": "title 2" , "reduction": [ { "items": "title 2" } , { "items": "title 2" } ] } , ... ] 操作后不会返回对象/字典,它会返回一个数组。我从您的查询中得到的输出如下:

items

如果你想要的是一个名为items的属性,以及// THIS IS JAVASCRIPT r.table('posts') .group('title') .map(function (item) { return { items: item('title') } }) .ungroup() .map(function (row) { return { 'title': row('group'), 'items': row('reduction'), 'count': row('reduction').count() } }) 属性有多少项的计数,你可以执行以下操作:

[
  {
    "count": 2 ,
    "items": [
      {
        "items":  "title 1"
      },
      {
        "items":  "title 1"
      }
    ],
    "title":  "title 1"
    },
  {
    "count": 2 ,
    "items": [
      {
        "items":  "title 2"
      } ,
      {
        "items":  "title 2"
      }
    ] ,
    "title":  "title 2"
  },
  ...
]

该查询的结果如下:

r.object

如果您想将该查询转换为对象/词典以便您可以通过它的标题调出帖子,则可以使用r.args将该帖子数组转换为对象与// THIS IS JAVASCRIPT r.table('posts') .group('title') .map(function (item) { return { items: item('title') } }) .ungroup() .map(function (row) { return { 'title': row('group'), 'items': row('reduction'), 'count': row('reduction').count() } }) .do(function (rows) { return r.object(r.args(rows.concatMap(function (row) { return [row('title'), row]; }))); }) 一起。完整的查询将如下所示:

{
  "title 1": {
    "count": 2 ,
    "items": [
      {
        "items":  "title 1"
      } ,
      {
        "items":  "title 1"
      }
    ] ,
    "title":  "title 1"
  } ,
  "title 2": {
    "count": 2 ,
    "items": [
      {
        "items":  "title 2"
      } ,
      {
        "items":  "title 2"
      }
    ] ,
    "title":  "title 2"
  } ,
  ...
}

该查询的结果将是这样的:

stylesOutputFilename