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 |
+---------------------------+