Rethinkdb 过滤不匹配的正则表达式

Rethinkdb filter on non-matching regular expression

我想查找与特定正则表达式模式不匹配的文档,但我在 re2(rethinkdb 使用的正则表达式库 (https://github.com/google/re2/wiki/Syntax) 中没有看到对此的任何支持。此外,我尝试使用服务器端 javascript 和 r.js() 来执行此操作,但我似乎无法获得正确的语法来提取我想要在每个键名是的嵌套字段中匹配的字符串字符串键。我在行 ["key"] 和 row.key 上收到未定义的对象错误:

```
filter(r.js('(function(row){
 var re = /(?!(json|JSON))$/;
 return re.test(row.student_record.the_test);
})'))
```

r.js是不得已的工具。此外,据我了解 JavaScript 和 RE2 如何一起工作,应该有一种通过特定对象的绑定,因为 /.../ 在 JavaScript 中标准化(如果 RethinkDB 甚至提供任何r.js 上下文,很可能 /.../ 永远做不到 RE2 能做的事)。

像这样的东西怎么样:

r.db('test')
  .table('test')
  .filter(doc =>
    doc.hasFields({'student_record': { 'the_test': true }})
      .and(doc('student_record')('the_test').match('(json|JSON)$').not())
  ) // matches all documents that have $.student_record.the_test not matching the regexp

r.db('test')
  .table('test')
  .filter(doc =>
    doc.hasFields({'student_record': { 'the_test': true }})
      .and(doc('student_record')('the_test').match('(json|JSON)$'))
      .not()
  ) // matches even documents that do not have $.student_record.the_test

?

  • doc.hasFields({'student_record': { 'the_test': true }}) - 验证给定文档的 JSON 路径是否存在。
  • doc('student_record')('the_test').match('(json|JSON)$') - 检查 $.student_record.test 是否匹配正则表达式。顺便问一下,您可能在寻找 '\.(?:json|JSON)$' 吗? (见分组前的转义点\.)。
  • not() - 反转表达式结果。