2017-09-14 186 views
1

在Neo4J数据库中,我需要找到一个具有3个命名节点(假设为a,b,c)和其他一些非命名节点的(复杂)模式,但前提是没有连接到a,b和c的节点(称为“x”)。Cypher WHERE NOT EXISTS与命名变量

我想写类似:

MATCH (a:A)-<something>-(b:B)-<something>-(c:C) 
WHERE NOT EXISTS ((a)--(x:X)--(b), (x)--(c)) 
RETURN a, b, c 

,但我得到 “变量x没有定义”。如果只有连接到(a)和(b)时才禁止x,那将很容易。而NOT EXISTS (a)--(:X)--(b) AND NOT EXISTS (a)--(:X)--(c)太强大了。

任何想法?

回答

0

你应该尝试MATCH荷兰国际集团x:X和使用它的WHERE

MATCH (x:X), (a:A)-<something>-(b:B)-<something>-(c:C) 
WHERE NOT EXISTS ((a)--(x)--(b), (x)--(c)) 
RETURN a, b, c 
+0

谢谢,就这么简单!是一种声音,我需要拆我的 “NOT EXISTS” 部分有两种: 'MATCH (X:X), (A:A) - - (B:B) - - (C:C) (0) - (x) - (b)) 不存在((x) - (c)) 返回a,b,c' – Vandy

+0

好的,该解决方案适用于小数据集,但它需要一个笛卡儿积......我需要在几个小时后停止我的请求,我有近10亿个节点:-(任何其他想法? – Vandy

+0

@Vandy你可以尝试在两个MATCH中拆分查询,如: (a) - (x) - (b),((b)) - (c) MATCH(a:A) - - (b:B) - - x) - (c)) RETURN a,b,c'。 –