Rethinkdb docs有这个例子来改进带有二级索引的getAll / contains查询:
// Create the index
r.table("users").indexCreate("userEquipment", function(user) {
return user("equipment").map(function(equipment) {
return [ user("id"), equipment ];
});
}, {multi: true}).run(conn, callback);
// Query equivalent to:
// r.table("users").getAll(1).filter(function (user) {
// return user("equipment").contains("tent");
// });
r.table("users").getAll([1, "tent"], {index: "userEquipment"}).distinct().run(conn, callback);
我的问题是,是否有办法做同样的事情但是要查询多个标签。使用二级索引可以使这个查询成为可能吗?
r.table("users").getAll(1).filter(function (user) {
return user("equipment").contains("tent", "tent2");
});
答案 0 :(得分:1)
可能我们可以做到这一点
r.table("users").getAll([1, "tent"]).filter(function (user) {
return user("equipment").contains("tent2");
});
所以像你一样构建一个多索引,并首先尝试getAll
,这样该部分对索引有效,然后filter
继续确保equipment
包含我们想要的数组。