了解Neo4j的运算符

时间:2019-06-18 11:23:23

标签: neo4j cypher

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 :(得分:0)

假设您以parameters的身份通过elementIdpropertyName,则此Cypher似乎等同于原始查询的意图:

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。