在 RethinkDB 中查找满足多个条件的文档

Finding a document in RethinkDB that meets multiple criteria

我想创建一个包装函数来接受一系列要求。此包装函数将向 rethinkDB 询问满足所有条件的任何文档。这些值将是数字,我希望返回任何 >= 要求的值。

API 中提供的语法如下:

r.table("name").filter(
r.row("cond1").lt(val1).and(r.row("cond2").gt(val2))
).run(conn, callback);

但这不允许我查询任意数量的条件。

是否有我缺少的功能,或者是否有以下解决方案: 1. 构建一个字符串并对其进行评估 - 或者 - 2. 将包含我的要求数组的函数传递给 RethinkDB 服务器?

一个可能更有意义的例子:我有一个怪物卡车的数据库。我想允许某人说"show me trucks with a power score of at least 5 and with a speed of at least 10"。这是传递函数的失败尝试:

r.db('test').table('monstertrucks').filter(
function(item){
var fail = 0, 
    arr = [{attr: "speed", val: 5}, {attr: "power", val: 10}];
for(var i = 0; i < arr.length; i++){
  if(item(arr[i].attr).lt(arr[i].val)){fail++}
}
return fail ? false : true;
})

RethinkDB 不只是 运行 您在服务器上的函数,它会调用您的函数一次来构建谓词。 (请参阅 http://rethinkdb.com/blog/lambda-functions/ 。)您可以构建所需的谓词并 return 像这样:

r.db('test').table('monstertrucks').filter(function(item) {
  var pred = r.expr(true);
  arr = [{attr: "speed", val: 5}, {attr: "power", val: 10}];
  for (var i = 0; i < arr.length; i++) {
    pred = pred.and(item(arr[i].attr).lt(arr[i].val));
  }
  return pred;
}