Cypher - 这个查询会实现我的目的吗?

时间:2017-05-03 07:45:02

标签: neo4j cypher

我想获取除钱包对之外的所有钱包节点,它们之间只有一个-- objectbricks -- localized field 关系,与任何其他钱包没有:SendTo关系。这个查询是否正确用于此目的?:

:SendTo

从我做过的测试中,我会说它是正确的。但我更愿意接受第二种意见。

AS如何创建图表:每个钱包节点通过一个或多个单向MATCH (n:Wallet) OPTIONAL MATCH (n)-[r1:SendTo]-(n1:Wallet)-[r12:SendTo]-(n2:Wallet) WHERE n <> n1 WITH n,count(n1) + count(n2) as rels OPTIONAL MATCH (n3:Wallet)-[r2:SendTo]-(n)-[r22:SendTo]-(n4:Wallet) WHERE n <> n3 WITH n, rels, count(n3) + count(n4) as rels1 WHERE rels1 > 0 or rels>0 return n 关系连接到另一个钱包节点或其自身。在同一个两个钱包节点之间可以有多个这样的关系。

1 个答案:

答案 0 :(得分:2)

您的查询提出了很多要求一个简单的问题“查找所有0或2 +边的钱包”。所以,即使它在技术上是正确的(太难阅读,太多了),它也会表现得很慢。所以你真正想要的是

MATCH (w:Wallet)
WITH w, size((n)-[:SendTo]-()) as edges
WHERE edges = 0 OR 1 < edges
RETURN w

(作为一般规则,如果您不确定某些事情在做什么,那么它或者是错误的,或者有人会试图“修复”并使其出错)