相关疑难解决方法(0)

查找没有特定关系的节点(Cypher/neo4j)

我有一个neo4j数据库,具有以下内容:

a:Foo
b:Bar
Run Code Online (Sandbox Code Playgroud)

大约10%的db有 (a)-[:has]->(b)

我只需要获得那些没有这种关系的节点!

以前做的事情()-[r?]-()会很完美!然而,它不再受支持:(而是,正如他们建议的那样

OPTIONAL MATCH (a:Foo)-[r:has]->(b:Bar) WHERE b is NULL RETURN a
Run Code Online (Sandbox Code Playgroud)

给我一个null结果,因为可选匹配需要BOTH节点在那里或BOTH节点不在那里......

那么如何获得所有未a:Foo附加的节点b:Bar

注意:数据集是数百万个节点,因此查询需要高效或以其他方式超时.

database neo4j cypher

17
推荐指数
2
解决办法
6930
查看次数

获取没有特定关系的节点(cypher/neo4j)

我有以下两种节点类型:

c:City {name: 'blah'}
s:Course {title: 'whatever', city: 'New York'}
Run Code Online (Sandbox Code Playgroud)

想要创造这个:

(s)-[:offered_in]->(c)
Run Code Online (Sandbox Code Playgroud)

我试图让所有与城市无关的课程与城市建立关系(如果不存在,城市就会被创造).然而,问题是我的数据集大约有500万个节点,并且我做出的任何查询超时(除非我增加10k).

......有人有什么建议吗?

编辑:

这是我现在正在运行的作业的查询(必须以10k块(数百万)完成,因为它需要几分钟.如果不存在则创建城市):

match (j:Job)
where not has(j.merged) and has(j.city)
WITH j 
LIMIT 10000
MERGE (c:City {name: j.city})
WITH j, c
MERGE (j)-[:in]->(c)
SET j.merged = 1
return count(j)
Run Code Online (Sandbox Code Playgroud)

(现在不知道过滤掉已经匹配的好方法,所以试着用自定义"merged"属性标记它,我已经有了索引)

neo4j graph-databases cypher

7
推荐指数
1
解决办法
1311
查看次数

如何在neo4j中找到没有传入关系的节点

我有2个节点类型,可以说"学生"和"老师"类型

Student have {id, name}.
Teacher have {id, name}.
Run Code Online (Sandbox Code Playgroud)

学生可以与班级节点建立可选关系,作为"教学".

(t:Teacher)-[r:TEACHES]->(c:Student).

[r:TEACHES] - Optional relationship. (present or may not present)
Run Code Online (Sandbox Code Playgroud)

我想找到没有老师的"学生"节点.即没有任何传入关系"教学"

请帮忙.

relationship neo4j cypher neo4jphp

6
推荐指数
2
解决办法
5896
查看次数