如何在Rethinkdb中查询复合索引(multi:true)

时间:2017-04-28 11:10:58

标签: rethinkdb

我无法让这个工作。应该这样做还是我做错了什么?

我创建了一个包含如下索引的表:

r.db("test").tableCreate("article", {primaryKey: 'id'})
r.db("test").table("article").indexCreate("root_presentation",[r.row("root_category_id"),r.row("presentation_category_ids")],{multi: true})

填充一些测试数据:

r.db("test").table("article").insert(
  [
    {id: "1", root_category_id: "100", presentation_category_ids: ["1","2"]},
    {id: "2", root_category_id: "100", presentation_category_ids: ["2","3"]},
    {id: "3", root_category_id: "200", presentation_category_ids: ["3","4"]},
    {id: "4", root_category_id: "200", presentation_category_ids: ["4","5"]},
  ]
)

像这样查询:

r.db("test").table("article").getAll(["100", "3"], {index: "root_presentation"})

我希望返回一个文件,但我没有。

使用RethinkDB 2.3.5

1 个答案:

答案 0 :(得分:0)

一对字段上的多索引将分别索引两个字段。要使用getAll查询此索引,请使用与一个字段或另一个字段匹配的单个值。

对于其他类型的查询,您需要使用索引函数,该函数返回将查询索引的所有可能值的数组。

例如,使用您创建的多索引

[r.row("root_category_id"),
 r.row("presentation_category_ids")]

您的第一份示例文档

{id: "1",
 root_category_id: "100",
 presentation_category_ids: ["1","2"]}

可以使用root_category_idpresentation_category_ids

进行查询
r.table("article")
 .getAll("100", {index: "root_presentation"})

r.table("article")
 .getAll(["1", "2"], {index: "root_presentation"})

您的示例查询["100", "3"]似乎由root_category_idpresentation_category_ids中的一个组成。

相应的索引函数需要返回这些对的数组。它可能看起来像这样

r.table("article")
 .indexCreate(
   "root_presentation",
   row =>
     row("presentation_category_ids")
      .map(cid => [row("root_category_id"), cid]),
   {multi: true})