как передать параметры с предложением Like и регулярным выражением в neo4j - PullRequest
1 голос
/ 23 апреля 2020

Я разрабатываю приложение, используя nodejs и neo4j. Я должен выполнить следующий запрос с параметрами, но это не дает результата, где pi.genenames = ~ '. $ nameParam. '

Match (pi:proteinidentifier)-[pe:proteinidentifier_has_a_ensembleprotein]-> (e:ensembleprotein)
-[ppi:on_interaction_with]->(en:ensembleprotein)-[ep:ensembleprotein_has_a_proteinidentifier]-(pi2:proteinidentifier) 
where pi.genenames  =~ '.*$nameParam.*' OR pi.uniprot =  $nameParam OR pi.ensembleprotein =  $nameParam 
return pi,pe,e,ppi,en,ep,pi2  limit $limitval

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Это потому, что .*$nameParam.* не соответствует требуемой строке внутри шифра. Попробуйте передать все выражение, включая *., чтобы предложение like выглядело так:

=~ $nameParamRegex

В качестве альтернативы, вы можете использовать ключевое слово contains, если регулярное выражение так просто, как здесь:

where pi.genenames contains $nameParam OR pi.uniprot = $nameParam et c.

0 голосов
/ 28 апреля 2020

Cypher не анализирует строковые литералы для выполнения замены параметра .

Вот почему это не работает:

pi.genenames =~ '.*$nameParam.*'

Однако здесь есть обходной путь, работает:

pi.genenames =~ ('.*' + $nameParam + '.*')

Но функция CONTAINS - лучший способ обработки вашего варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...