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

时间:2017-10-09 21:57:42

标签: neo4j cypher

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

两者之间是否存在实际差异?当您知道属性值时,第一种形式似乎运行良好,但有没有办法使用通配符或LIKE条件?

1 个答案:

答案 0 :(得分:5)

EXPLAIN and PROFILE options显示查询的执行计划。

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

enter image description here

enter image description here

因此,在性能方面,这两个符号应该完全相同。

  

当您知道属性值时,第一种形式似乎运行良好,但有没有办法使用通配符或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)等模式的一部分。