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

RethinkDB - how to filter records where attribute matches a list / array

RethinkDB

我想获取所有具有特定 field/attribute 匹配 3 个不同可能值之一的记录。

在下面的示例中,我想查看 status 等于 'Ready'、'Active' 或 'Something else'[ 的所有记录=25=]

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

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

  function (rec) { 
    return [ 'Ready', 'Active', 'Something else' ].includes( rec('status') );   
  }

);

这没有错误,也没有 return 我所有状态等于 'Ready'、'Active' 或 'Something else' 的记录(它 return没有结果)。

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

好的,我在阅读了更多关于 ReQL 查询语言的内容后明白了这一点。

我们那里没有 JS 函数,而是 ReQL,这基本上意味着您可以使用 .match() 和正则表达式。
匹配列表的正则表达式只是用“|”分隔匹配的字符串。

所以上面例子的解法是

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

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

);

另一个更接近您最初预感的解决方案是使用 .contains(...):

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

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