根据节点

时间:2018-06-04 14:36:40

标签: neo4j cypher

我正在尝试在节点之间创建多个关系,以表示两个给定节点之间的重要性

例如,我想知道什么是'类型'阅读材料对乔来说是最重要的。

Neo4j Graph of What Joe likes to read

我想要一种方法将Joe节点与流派节点匹配,只要它们之间存在一些数字或更大的关系。

所以,如果我想要与3个或更多关系匹配,我应该得到一个带有 Joe 的图表 - >的奇幻

我知道在定义两个端点时我可以得到这个:

MATCH (p:PERSON {name:'Joe'})-[r]->(g: GENRE {name:'Fantasy'}) 
RETURN count(r)

我想要的是:

MATCH p = (p:PERSON {name:'Joe'})-[r]->()
WHERE *pair_relationship_count*(r) >= 3
RETURN p

3 个答案:

答案 0 :(得分:0)

这是我的主张:

MATCH path = (p:PERSON {name:'Joe'})-[r]->() 
WITH collect(path) as paths, collect(r) as pair_count
WITH paths WHERE size(pair_count) >= 3 
UNWIND paths as path
RETURN path

但是,对于每个节点,在一个关系上与内部计数属性建立一个关系可能更有效。

答案 1 :(得分:0)

首先,我认为您可以使用Cloudfront子句实现目标:

build:options:styles

但是每次阅读都会使用一种关系"事件"似乎是一个糟糕的方法。也许你应该在关系中使用一个整数属性,然后为每个" read"增加这个属性。这样您就可以执行以下查询:

MATCH path = (:PERSON {name:'Joe'})-[r]->(:GENRE {name:'Fantasy'})
WITH path, count(r) as count
WHERE count > 3
RETURN path

答案 2 :(得分:0)

获取“Joe”的所有READS路径的集合,其中涉及他已阅读至少3次的每种类型:

MATCH p = (:PERSON {name:'Joe'})-[:READS]->(genre)
WITH genre, COLLECT(p) AS paths
WHERE SIZE(paths) >= 3
RETURN genre, paths;