在Cypher中使用match({property})和WHERE子句之间的区别

bje*_*ang 1 neo4j cypher

我注意到了,match(a:Vegetable{name:'Cellery'}) return amatch(a:Vegetable) where a.name='Cellery' return a得到了相同的结果。

两者之间是否有实际区别?当您知道属性值时,第一种形式似乎可以很好地工作,但是是否可以使用通配符或LIKE条件呢?

Gab*_*yas 5

EXPLAINPROFILE选项显示查询的执行计划。

它们显示两个查询完全相同的执行计划(在空数据库上)。

在此处输入图片说明

在此处输入图片说明

因此,从性能角度来看,这两种表示法应该完全相同。

当您知道属性值时,第一种形式似乎可以很好地工作,但是是否可以使用通配符或LIKE条件呢?

没错,可以WHERE为您提供更大的灵活性。基本上,该MATCH子句仅允许您检查可以写为的相等性WHERE a.prop1 = value1 AND a.prop2 = value2 AND ...。同时,WHERE可以让你多了很多:在AND/ OR/ XORNOT逻辑运算符,检查不平等; 使用STARTS WITHCONTAINSENDS WITH和正则表达式; 检查节点类型WHERE (a:SomeLabel)(甚至检查匹配变量是否是模式的一部分)WHERE NOT (a)-[:SOME_REL]->(:SomeLabel)