或重新思考查询
OR query in rethink
是否可以在 Rethink 中对数组的值进行 OR 搜索。
例如:我将 table 称为 "post",字段 "tags" 是一个数组。我想对标签的值进行 OR 搜索。
post1 {
tags : ["young","agreesive"]
}
post2 {
tags : ["cricket","India"]
}
给我所有包含标签 "young" 或 "cricket" 的帖子,应该 return 都是帖子。
您可以使用 or
和 contains
来做到这一点:
r.table('posts').filter(function(row) {
return row('tags').contains('young').or(row('tags').contains('cricket'));
})
正如 mlucy 所说,您可以将 filter
与 or
和 contains
结合使用来获取具有特定标签的所有文档。
如果您有一组标签,您也可以执行以下操作:
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
.
更高效、更清晰
是否可以在 Rethink 中对数组的值进行 OR 搜索。
例如:我将 table 称为 "post",字段 "tags" 是一个数组。我想对标签的值进行 OR 搜索。
post1 {
tags : ["young","agreesive"]
}
post2 {
tags : ["cricket","India"]
}
给我所有包含标签 "young" 或 "cricket" 的帖子,应该 return 都是帖子。
您可以使用 or
和 contains
来做到这一点:
r.table('posts').filter(function(row) {
return row('tags').contains('young').or(row('tags').contains('cricket'));
})
正如 mlucy 所说,您可以将 filter
与 or
和 contains
结合使用来获取具有特定标签的所有文档。
如果您有一组标签,您也可以执行以下操作:
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
.