RethinkDB - 如何过滤属性与列表/数组匹配的记录

时间:2016-09-09 08:40:23

标签: arrays filter match rethinkdb reql

RethinkDB

我想获取具有与3个不同可能值之一匹配的特定字段/属性的所有记录。

在下面的示例中,我想查看r.db('db').table('table').filter( function (rec) { return [ 'Ready', 'Active', 'Something else' ].includes( rec('status') ); } ); 等于'准​​备好,'有效'或'的所有记录?别的'

我希望能够做到这样的事情:

{{1}}

这不是错误,也不会将状态等于'准​​备好','有效'或其他'其他'等等的所有记录归还给我39; (它没有返回任何结果)。

如何查找字段与数组中任何一个值匹配的所有记录?

2 个答案:

答案 0 :(得分:2)

另一种更接近初始预感的解决方案是使用.contains(...)

r.db('db').table('table').filter(
  function (rec) { 
    return r.expr(['Ready', 'Active', 'Something else']).contains( rec('status'));   
  }
);

这可能比使用正则表达式更有效。

答案 1 :(得分:1)

好的,我在阅读了更多关于ReQL查询语言的内容后想出了这个。

我们没有JS功能,而是ReQL,基本上只是意味着您可以使用.match()和正则表达式。
匹配列表的正则表达式只是将匹配的字符串与条形" |"分开。

所以上面例子的解决方案是

r.db('db').table('table').filter(

  function (rec) { 
    return rec('status').match( "Ready|Active|Something else" );   
  }

);