【发布时间】:2014-07-17 16:42:58
【问题描述】:
我在使用简单的密码查询时遇到了问题。查询是:
MATCH (u:user { google_id : 'example_user' })--(rm:room)--(a:area),
(c:category { name : 'culture:Yoruba' })--(o:object)
WHERE NOT (a-[:CONTAINS]->o)
RETURN DISTINCT o.id
“WHERE NOT..”被忽略,我正在从区域节点取回具有传入 :CONTAINS 关系的节点。如果我取出“NOT”函数,那么我正确地只取回具有这种 a-->o 关系的节点。
我觉得我对NOT()的理解很薄弱
【问题讨论】:
-
它似乎在这里工作:console.neo4j.org/r/4nukek你能在那里重现问题并分享一个新链接吗?
-
还要小心这样的不连贯模式,您将得到两个模式部分中单独匹配的任何内容的叉积。在小图上它可能无关紧要,但在较大的图上它会很昂贵。我可能会更好地使用
WITH a MATCH (c:category ...中断查询而不是过滤返回到不同的值。 -
在此处查看重现的问题:link 最后一个查询不应返回对象 3704。我尝试使用 WITH A 语法。谢谢你。
-
我开始回答,但 Jim 打败了我,这是一个很好的回答。仅返回不同的结果有时会隐藏路径组合的意外影响。此外,您可能最好在模式中声明关系类型和方向,并且您可以尝试在
WHERE子句中的路径谓词中使用更长的模式(使用匹配来达到新结果,使用位置来限制)。你可以尝试这样的事情:console.neo4j.org/r/xlvmsy