或重新思考查询

OR query in rethink

是否可以在 Rethink 中对数组的值进行 OR 搜索。

例如:我将 table 称为 "post",字段 "tags" 是一个数组。我想对标签的值进行 OR 搜索。

post1 {
tags : ["young","agreesive"]
}

post2 {
tags : ["cricket","India"]
}

给我所有包含标签 "young" 或 "cricket" 的帖子,应该 return 都是帖子。

您可以使用 orcontains 来做到这一点:

r.table('posts').filter(function(row) {
  return row('tags').contains('young').or(row('tags').contains('cricket'));
})

正如 mlucy 所说,您可以将 filterorcontains 结合使用来获取具有特定标签的所有文档。

如果您有一组标签,您也可以执行以下操作:

var tags = ["young", "cricket"];

r.table('posts').filter(function (row) {
  return r.expr(tags).contains(function (value) { 
    return row("tags").contains(value) 
  });
})

这比使用 or 更容易扩展。

多索引

您还可以为 属性 创建一个 multi-index。多索引让您可以通过数组中的任何值查找数据。所以,例如:

r.table("posts").indexCreate("tags", {multi: true})
r.table("posts").getAll("young", "cricket", {index: "tags"})

此查询将获取所有带有 "young" 和 "cricket" 标记的文档,并且它比使用嵌套的 contains.

更高效、更清晰