此(newbe-)问题基于官方getting started with neo4j online-tutorial中提供的数据库 .
我的目标是创建一个查询,列出所有连接到 more than two 电影的人 . 数据库由人和电影类型的节点组成 . 节点通过诸如'ACTED_IN','DIRECTED','WROTE'或'PRODUCED'之类的关系连接 .
数据库表示Gene Hackman在三部不同的电影中演出,而Cameron Crowe则导演,制作和编写了一部电影 . 所以Cameron与一部电影有三种关系,而Gene连接三部不同的电影 . 存在更多节点和连接 .
我目前的查询如下:
match (p:Person)-[r]->(m:Movie) with p, count(r) as rel where rel > 2 return p;
这将返回:
-
Gene Hackman
-
汤姆克鲁斯
-
Cameron Crowe
基因和汤姆各自播放了三部不同的电影,所以这是正确的 . 如上所述,卡梅隆的所有关系都出现在同一部电影中,这不是我的意图 . 查询不应该返回此列表中的Cameron,而只返回前两个人 .
很明显,我可以通过'ACTED_IN'关系,但我也想列出不是演员的人,例如撰写三部或三部以上单独电影的作者 .
我的另一个问题是:
match (m:Movie)<-[ra]-(p:Person)-[rb]->(b:Movie) ...
不幸的是,这将连接数限制为两个 .
在计算人物和电影之间的关系时,是否有可能以仅包含不同电影的方式调整第一个查询?
2 回答
这是一个可以做你想要的查询 .
你并不真正关心关系类型,所以不要担心 . 您为每个人收集不同的电影,如果不同电影的数量大于您的阈值,则返回此人 .
恩典与和平,
吉姆
试试这个查询:
它的作用是从关系中提取结束节点 . 你想要的是只有一部这样的电影,摆脱卡梅伦克罗的问题 .