我无法让这个工作。应该这样做还是我做错了什么?
我创建了一个包含如下索引的表:
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
答案 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_id
或presentation_category_ids
r.table("article")
.getAll("100", {index: "root_presentation"})
r.table("article")
.getAll(["1", "2"], {index: "root_presentation"})
您的示例查询["100", "3"]
似乎由root_category_id
和presentation_category_ids
中的一个组成。
相应的索引函数需要返回这些对的数组。它可能看起来像这样
r.table("article")
.indexCreate(
"root_presentation",
row =>
row("presentation_category_ids")
.map(cid => [row("root_category_id"), cid]),
{multi: true})