2 votes

Réfléchir à la correspondance de chaînes Rethinkdb deux tableaux

J'ai deux tableaux contenant uniquement des chaînes de caractères que je voudrais faire correspondre.

Je ne peux pas utiliser contains ou setIntersection car je veux que la correspondance ne soit pas sensible à la casse.

J'ai essayé plusieurs façons différentes mais je n'ai pas trouvé de solution qui fonctionne. Je pense que c'est la meilleure solution à laquelle je suis parvenu jusqu'à présent, mais cela ne fonctionne pas :

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 );
} );

la colonne des tags est un tableau de chaînes de caractères. Mais je pense que le problème est que m n'est pas une chaîne de caractères donc je ne peux pas l'utiliser avec match. Mais comment puis-je le convertir en chaîne de caractères ? J'ai essayé coerceTo mais cela ne fonctionne pas.

Des idées sur la manière de faire fonctionner cela ?

0voto

AtnNn Points 4092

Vous devriez pouvoir faire fonctionner votre requête en utilisant .add() au lieu de +, par exemple :

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

Vous pourriez aussi essayer quelque chose comme ceci à la place :

r.db('my_db').table('Table').hasFields('tags').filter(row =>
  row('tags').map(x => x.upcase()).setIntersect(['FOO', 'BAR', 'FOOBAR']).isEmpty().not())

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X