Строка Rethinkdb соответствует двум массивам

У меня есть два массива, содержащие только строки, которые я хотел бы сопоставить.

Я не могу использовать contains или setIntersection, потому что я хочу, чтобы также работало совпадение без учета регистра.

Я пробовал много разных способов, но я не нашел рабочего решения. Я думаю, что это лучшее, что я придумал до сих пор, но это не работает:

r.db( 'my_db' ).table( 'Table' ).hasFields( 'tags' ).filter( function( row ) { 
  return row( 'tags' ).filter( function( t ) {
    return r.expr( [ 'Foo', 'Bar', 'FooBar' ] ).filter( function( m ) {
      return t.match( '(?i)^' + m + '$' );
    } ).count().gt( 0 );
  } ).count().gt( 0 );
} );

столбец тегов представляет собой массив строк. Но я думаю, проблема в том, что m не является строкой, поэтому я не могу использовать ее с матчем. Но как я могу преобразовать его в строку? Я пробовал coerceTo, но это не работает.

Любые идеи о том, как заставить это работать?


person John Karlsson    schedule 08.06.2017    source источник


Ответы (1)


Вы должны иметь возможность заставить свой запрос работать, используя .add() вместо +, например:

r.expr('(?i)^').add(m).add('$')

Вы также можете попробовать что-то вроде этого:

r.db('my_db').table('Table').hasFields('tags').filter(row =>
  row('tags').map(x => x.upcase()).setIntersect(['FOO', 'BAR', 'FOOBAR']).isEmpty().not())
person AtnNn    schedule 08.06.2017
comment
Спасибо, ваше второе решение было тем, что я тоже сделал. Но я думаю, что изменю это на использование add вместо +, потому что это похоже на правильное решение. - person John Karlsson; 11.06.2017