2013-10-29 65 views
1

如果我有一個包含多個二級索引的表,我該如何生成一個交集?舉例來說,如果我有與「名字」和「姓氏」二級索引的用戶表,並且希望所有用戶名爲「鮑勃·史密斯:如何交叉多個二級索引查詢

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

我可以使用過濾器,但我的理解是,將更慢:

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

或者,我可以做一個複合指數的交點?

回答

1

正確的做法是使用複合索引。例如:

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

您目前無法在單個查詢中使用多個索引。這是反思可能在未來支持的東西,但現在它不支持。

+2

謝謝。我相信getAll應該是getAll([「Bob」,「Smith」],{index:'fullName'}) – bjnortier

0

正確更新的方法是根據first_name和last_name屬性創建複合輔助索引。在JS中更新的示例: r.table("users").indexCreate( "full_name", [r.row("last_name"), r.row("first_name")] ).run(conn, callback)

然後,您的查詢將類似於獲取所有用戶,其姓氏是Smith,名字是John。 r.table("users").getAll(["Smith", "John"], {index: "full_name"}).run(conn, callback)