Cypher / Neo4j:与来自不同国家的至少一位auth共同撰写的图书?

时间:2016-08-09 18:19:33

标签: neo4j cypher

我正在学习Cypher并且遇到一个问题,这对于有经验的人来说可能很容易。 我创建了一个小作者和出版物图。作者来自一个国家,如:

person -[:WROTE]-> book
person-[:FROM]-> country

书籍有一个或多个作者。我想找到由来自不止一个国家​​的人共同撰写的书籍。换句话说,就其作者身份进行国际合作的书籍 你的建议会很有帮助!

1 个答案:

答案 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