使用RethinkDB,如何实现标签云?

时间:2014-10-17 09:08:40

标签: rethinkdb

假设我有表(带有示例数据):

 story
 {id: 1, name: 'First Story', tags: ['plants', 'flowers']}
 {id: 1, name: 'Second Story', tags: ['flowers', 'wedding']}

 tag
 {id: 'plants'}
 {id: 'flowers'}
 {id: 'weddings'}

故事表在标签字段上有一个多索引。

现在,我将如何进行查询,从而产生每个标签所具有的故事数量(因此可以将其显示为标签云)。例如:

 {"plants": 1, "flowers": 2, "wedding": 1}

或者它可以采用以下格式:

 [{id: "plants", count: 1}, {id: "flowers", count: 2}, {id: "wedding", count: 1}]

并以高效的方式进行,其中包含数十万个故事和数百个标签的表格可以快速完成查询?

1 个答案:

答案 0 :(得分:3)

r.table("story").indexCreate("tags", {multi: true}).run(...)
r.table("story").group({index: "tags"}).count().run(...)

如果你想美化小组/计数的结果,你可以做

r.table("story").group({index: "tags"}).count().ungroup().map(function(result) {
  return r.object(result("group"), result("reduction"))
})