Neo4j Cypher-计算一个查询中两个独立模式的出现次数

Neo4j Cypher-计算一个查询中两个独立模式的出现次数,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,问题:在不使用可选关系的情况下,如何计算单个密码查询中两个独立模式的出现次数 例如:对于社交网络中的每个人,计算他们有多少朋友,发了多少帖子 有了可选的关系,这很容易 数一个人的朋友: MATCH (person:PERSON) WITH person MATCH (person)-[?:KNOWS]-(friend:PERSON) RETURN person.firstName AS name, count(friend) AS friends +----------------------

问题:在不使用可选关系的情况下,如何计算单个密码查询中两个独立模式的出现次数

例如:对于社交网络中的每个人,计算他们有多少朋友,发了多少帖子

有了可选的关系,这很容易

数一个人的朋友:

MATCH (person:PERSON)
WITH person
MATCH (person)-[?:KNOWS]-(friend:PERSON)
RETURN person.firstName AS name, count(friend) AS friends

+----------------------+
| name       | friends |
+----------------------+
| "alex"     | 3       |
| "aiya"     | 1       |
| "jacob"    | 1       |
| "peter"    | 1       |
| "stranger" | 0       |
+----------------------+
点算人员职位:

MATCH (person:PERSON)
WITH person
MATCH (person)<-[?:HAS_CREATOR]-(post:POST)
RETURN person.firstName AS name, count(post) AS posts

+--------------------+
| name       | posts |
+--------------------+
| "alex"     | 0     |
| "aiya"     | 3     |
| "jacob"    | 3     |
| "peter"    | 1     |
| "stranger" | 2     |
+--------------------+
供参考,预期结果为:

+---------------------------+
| name    | friends | posts |
+---------------------------+
| "alex"  | 3       | 0     |
| "peter" | 1       | 1     |
| "aiya"  | 1       | 3     |
| "jacob" | 1       | 3     |
+---------------------------+

这正是可选关系的用例。如果没有可选的?:KNOWS to match to,您是在对cypher说我只想匹配那些与另一个人有:KNOWS关系的人。将它们与关系数一起返回。根据你所要求的匹配,这就正确地排除了那些没有“知道”关系的人

通过?:KNOWS将关系添加为可选关系,您正在询问cypher:请让我找到所有人,并将他们与使用:KNOWS关系的其他人进行匹配(如果他们有)。返回所有人并数一数他们的朋友


你能解释一下为什么在这种情况下你不能使用可选关系进行匹配,因为在我看来,它正是这份工作的工具吗?

Hi@Edward,这更多的是出于好奇而不是其他原因。我给出的例子是我所能想到的最简单的例子,但在更复杂的情况下,独立模式更长,可选关系更难应用。
MATCH (person:PERSON)-[:KNOWS]-(friend:PERSON)
WITH person, count(friend) AS friends
MATCH (person)<-[:HAS_CREATOR]-(post:POST)
RETURN person.firstName AS name, friends, count(post) AS posts

+---------------------------+
| name    | friends | posts |
+---------------------------+
| "peter" | 1       | 1     |
| "aiya"  | 1       | 3     |
| "jacob" | 1       | 3     |
+---------------------------+
+---------------------------+
| name    | friends | posts |
+---------------------------+
| "alex"  | 3       | 0     |
| "peter" | 1       | 1     |
| "aiya"  | 1       | 3     |
| "jacob" | 1       | 3     |
+---------------------------+