如何与多个二级索引查询相交

时间:2013-10-29 11:18:22

标签: rethinkdb

如果我有一个包含多个二级索引的表,我该如何生成一个交集?例如,如果我在“firstName”和“lastName”上有一个带有二级索引的users表,并且想要所有名为“Bob Smith”的用户:

r.table('users').getAll('Bob', {index: 'firstName'}).XXXX('Smith', {index: 'lastName'})

我可以使用过滤器,但我的理解是速度会慢一些:

r.table('users').getAll('Bob', {index: 'firstName'}).filter({'lastName': 'Smith'})

或者,我可以使用复合索引进行交叉吗?

2 个答案:

答案 0 :(得分:1)

执行此操作的正确方法是使用复合索引。例如:

table.index_create("fullName", lambda doc: [doc["firstName"], doc["lastName"])
table.getAll(["Bob", "Smith"])

目前,您无法在单个查询中使用多个索引。这是Rethink未来可能支持的东西,但现在却没有。

答案 1 :(得分:0)

正确更新的方法是根据first_name和last_name属性创建复合二级索引。 JS中更新的示例: <div class='forms'>

然后,您的查询将类似于获取姓氏为Smith并且名字名为John的所有用户。 r.table("users").indexCreate( "full_name", [r.row("last_name"), r.row("first_name")] ).run(conn, callback)