我正在学习Cypher并且遇到一个问题,这对于有经验的人来说可能很容易。 我创建了一个小作者和出版物图。作者来自一个国家,如:
person -[:WROTE]-> book
person-[:FROM]-> country
书籍有一个或多个作者。我想找到由来自不止一个国家的人共同撰写的书籍。换句话说,就其作者身份进行国际合作的书籍 你的建议会很有帮助!
答案 0 :(得分:1)
假设您的标签是:Book,:Person,and:Country,那:人员只能来自一个国家:
// first find books written by more than one person
MATCH (b:Book)
WHERE SIZE((:Person)-[:WROTE]->(b)) > 1
WITH b
// now match on authors and their countries
MATCH (p:Person)-[:WROTE]->(b)
MATCH (p)-[:FROM]->(c:Country)
// associate books with the number of distinct author countries
// and filter to those with more than one
WITH b, COUNT(DISTINCT c) as authorCountries
WHERE authorCountries > 1
RETURN b
EDIT在下面添加了更多评论
这种方法使用与WITH连接的子查询,只允许您在感兴趣的匹配项上展开图表(例如,从人员到他们的国家/地区)。在这种情况下,它使我们不必扩展并考虑所有书籍及其作者和国家的较大图表......我们只使用我们知道有多个作者的书籍来做这件事。
如果你想一次完成所有事情,它看起来像这样:
MATCH (b:Book)<-[:WROTE]-(:Person)-[:FROM]->(c:Country)
WITH b, COUNT(DISTINCT c) as authorCountries
WHERE authorCountries > 1
RETURN b