如果我有一个包含多个二级索引的表,我该如何生成一个交集?例如,如果我在“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'})
或者,我可以使用复合索引进行交叉吗?
答案 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)