Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Neo4j查找最远的节点(没有任何传入关系的节点)_Neo4j_Cypher_Neo4jclient - Fatal编程技术网

使用Neo4j查找最远的节点(没有任何传入关系的节点)

使用Neo4j查找最远的节点(没有任何传入关系的节点),neo4j,cypher,neo4jclient,Neo4j,Cypher,Neo4jclient,我已经在Neo4j中创建了一个graph db,并希望将其用于泛化目的 它们之间大约有500000个节点(20个不同的标签)和250万个关系(50种不同的类型) 在示例路径中:a->b->c->d->e 我想找出没有任何传入关系(即“a”)的节点。 我应该对所有节点都这样做(在没有传入关系的所有可能路径的开始处查找节点) 我尝试了几种密码,但没有成功: match (a:type_A)-[r:is_a]->(b:type_A) with a,count (r) as count wher

我已经在Neo4j中创建了一个graph db,并希望将其用于泛化目的

它们之间大约有500000个节点(20个不同的标签)和250万个关系(50种不同的类型)

在示例路径中:a->b->c->d->e

我想找出没有任何传入关系(即“a”)的节点。 我应该对所有节点都这样做(在没有传入关系的所有可能路径的开始处查找节点)

我尝试了几种密码,但没有成功:

match (a:type_A)-[r:is_a]->(b:type_A) 
with a,count (r) as count
where count = 0 
set a.isFirst = 'true'

匹配(a:类型a),(b:类型a)

其中not(a)如果要查找没有传入关系的所有节点,可以使用
可选匹配来查找它们:

START n=node(*)
OPTIONAL MATCH n<-[r]-()
WITH n,r
WHERE r IS NULL 
RETURN n
START n=node(*)

可选匹配n您的第一个查询将只匹配存在关系的路径
[r:is_a]
,因此计数
r
永远不能为0。第二个查询将返回标记为
:typeA
的任意一对节点,这些节点与
[:is\u a]
没有传递关系。您需要的是对路径谓词进行筛选。对于一般情况,请尝试

MATCH (a)
WHERE NOT ()-->a
这大致可以翻译为“没有传入关系的任何节点”。例如,可以根据需要使用类型、属性或标签指定图案

MATCH (a:type_A)
WHERE NOT ()-[:is_a]->a

你说的“没有任何成功”是什么意思?发生了什么?只有10%的节点没有传入关系。但是我的查询会返回所有节点。@jjaderberg,tstorms感谢您的快速响应。这种节点类型有65247个成员,我知道其中大约10%没有传入关系。因此,正确的代码必须返回大约6500个节点。但是,我尝试过的所有代码,包括您发送给我的代码,都返回了65247个节点!我不知道如何在此查询中找到所有节点。我将您的代码更改为:
match(a:type_a)可选匹配a返回计数(不同的a)
有线索吗?最好的情况是,我编辑了查询,其中的WHERE绑定到匹配项,因此它应用于匹配项中以过滤匹配结果。您必须添加一个带有afterward的查询。所有节点都会返回(有或没有传入关系)。有什么想法吗?如果运行第一个查询并返回
a
,则返回的任何节点都没有传入关系。但您也可以使用诸如“某某类型的传入关系”或“来自标签为某某的节点”之类的内容来限定您的模式,很可能出现了一些问题。这里是控制台中的一个示例,从那里开始并尝试重现问题(您可以添加自己的数据的一个小样本)。
MATCH (a:type_A)
WHERE NOT ()-[:is_a]->a