Понимание операторов Neo4j - PullRequest
1 голос
/ 18 июня 2019
String query = "START n1=node:TEST_INDEX(nodeName='" + elementID
                + "') match n1-[:hasSubClass]->n2-[:hasPropertyGroup]->n3-[:containsProperty]->n4 with n2 match n2-[:hasInstance]->n5 "
                + "where n2.elementType='class' and not(n4.status! = 'Deleted') and n4.nodeName! =~ '(?i)" + propertyName + "' and where count(n5)=0 return n4,count(n5)";

Я пытаюсь преобразовать этот конкретный запрос в запрос MATCH, сталкивающийся с проблемой понимания этих условий

not (n4.status! = 'Удалено') и n4.nodeName! = ~ '(? i) "+ propertyName + "'

Я пытался изменить запрос: -

MATCH(n1:TESTDATA{nodeName:'ProductConcept'})
match (n1)-[:hasSubClass]->(n2)-[:hasPropertyGroup]->(n3)-[:containsProperty]->(n4) with n2,n4
match (n2)-[:hasInstance]->(n5)
where n2.elementType='class' 
and NOT EXISTS(n4.status) 
and n4.nodeName <>'(?i)view'
//and where count(n5)=0 
return n4,count(n5)

1 Ответ

0 голосов
/ 18 июня 2019

Если вы передадите elementId и propertyName в качестве параметров , этот шифр, по-видимому, эквивалентен цели вашего исходного запроса:

START n1=node:TEST_INDEX(nodeName=$elementId)
MATCH (n1)-[:hasSubClass]->(n2)-[:hasPropertyGroup]->()-[:containsProperty]->(n4)
WHERE
  n2.elementType = 'class' AND
  n4.status = 'Deleted' AND
  (NOT n4.nodeName =~ ('(?i)' + $propertyName)) AND
  SIZE((n2)-[:hasInstance]->()) = 0
RETURN n4

Этот запрос не беспокоитвернуть эквивалент COUNT(n5), поскольку запрос требует, чтобы значение всегда было равно 0.

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