使用neo4j cypher查找满足给定连接条件的大多数连接节点。共同著书的作者

使用neo4j cypher查找满足给定连接条件的大多数连接节点。共同著书的作者,neo4j,cypher,Neo4j,Cypher,有人能帮我解决这个奇怪的问题吗 假设我有一本书,每本都与各自的作者有关 我想找出合作最多的作者(以及他们合作过的书籍),其中合作数量不包括仅与一本书相关的作者 例如 Author1已经写了3本书(A、B、C和D),因此 有资格被视为合著者。笔记簿A是独奏的 作者:作者1 Author2只有一本书(b书),因此没有资格被视为合著者 作者3已经写了2本书(b&c书),可以统计 作者4已经写了2本书(C&D书),可以统计 上述查询的结果应为 作者1-合著人数2 作者3-合著者计数1 作者4-合著

有人能帮我解决这个奇怪的问题吗

假设我有一本书,每本都与各自的作者有关

我想找出合作最多的作者(以及他们合作过的书籍),其中合作数量不包括仅与一本书相关的作者

例如

  • Author1已经写了3本书(A、B、C和D),因此 有资格被视为合著者。笔记簿A是独奏的 作者:作者1
  • Author2只有一本书(b书),因此没有资格被视为合著者
  • 作者3已经写了2本书(b&c书),可以统计
  • 作者4已经写了2本书(C&D书),可以统计
上述查询的结果应为

  • 作者1-合著人数2
  • 作者3-合著者计数1
  • 作者4-合著者计数1
  • B册
  • c册
  • D册
注:

  • 作者2将不合格(仅合著一本书)
  • A书将不合格(只有一位作者)
我可以很容易地返回一个图书和作者列表,其中图书上有两个以上的作者,但我很难将只有一个连接的图书或作者保留在结果之外。

MATCH(c:Author)-[r:AUTHORED]->(:book)
对于c,将(r)计为记账
其中bookCount>1
使用COLLECT(c)作为validAuthors

MATCH(a1:Author)-[:Authoried]->(b:Book)嗨,欢迎来到stack overflow。你做的代码在哪里?嗯。你问题中的大多数计数似乎是错误的。难道不是
Author1
author4本书(其中3本是合作的)?你是故意从每一个合著者计数中减去1吗?你可能想确保a1也在validAuthors中,否则你可能会得到不正确的结果。虽然如果在第二次匹配之前
将validAuthors作为a1展开,这也会起作用。建议将书籍限制为合著书籍,但仍允许结果集中仅包含一本合著书籍的作者。我试图根据下面的注释编写代码:MATCH(c:Author)-[r:AUTHORED]->(:Book)1,COLLECT(c)作为validAuthors匹配(a1:Author)-[:AUTHORED]->(b:Book)hi@MarkFallu,您对两个不正确的关系使用变量“r”,并且需要进行计数(不同的r)在第一次聚合中,因为如果一本书有三个作者,同一关系可以计算两次,如果一本书有四个作者,则可以计算三次,依此类推