cypher查询查找节点

时间:2015-04-10 17:26:21

标签: neo4j cypher graph-databases

在示例http://gist.neo4j.org/?8526106中,假设我不知道亚马逊节点的名称,它只是我正在寻找的随机节点。

我如何找到这些具有进一步传出关系的节点。在我的graphdata中,我有4000个节点和两种类型的关系,一个是CALLS,另一个是IS CALLING,但我想只有与节点的调用关系, 我尝试了这个查询,但我仍然得到IS_CALLING并启动节点。

match path=(n)-->(m) 
WHERE ALL (r IN rels(path) WHERE type(r)='CALLS'AND NOT type(r)='IS_CALLING')           collect(path) as PATHS
return PATHS limit 100;

结果我仍然得到关系类型" IS_CALLING"。我也尝试过非常简单的

START a=node(*), b=node(*), c=node(*)
match p=(a)-[:CALLS]->(b)-[:CALLS*0..1]->(c) 
WHERE NOT ((c)-[:CALLS|IS_CALLING]->()) 
return p limit 100;

查看a是否连接到b并且b连接到c显示节点,这些节点没有进一步连接到任何东西,但是再次IS_CALLING就在那里。 如果我做错了,或者我错过了什么,请纠正我。 先感谢您。

1 个答案:

答案 0 :(得分:0)

这可能只是Neo4j如何显示结果的问题。如果结果中的两个节点已连接,则即使它们实际上不是匹配的一部分,它们的所有关系也会显示在图形视图中。

我在自己的数据上尝试了相同的查询结构,并在图形输出中看到了相同的结果,其中NOT - 类型关系与所选类型一起出现。但是,尝试这样的事情:

MATCH path=(n)-[R]->(m) 
WHERE ALL (r IN rels(path) WHERE type(r)='CALLS' AND NOT type(r)='IS_CALLING')           
RETURN n, type(R), m LIMIT 100;

如果查看列表视图而不是图表视图,您应该会看到实际结果只包含您想要的所选关系。