在 Neo4j 中获取与节点特定关系的计数

Fetch Count of Specific Relation to a Node in Neo4j

我在 Neo4J 中有一个场景,其中 "User" 节点与关系名称为 "WRITES" 的节点 "Post" 相关。现在 "Post" 节点可以接收名为"LIKES" 来自其他节点(用户)。现在我想获取 where 子句中提到的用户写的 post 的数据及其对应的点赞数。我已经编写了以下查询,但它不起作用。

MATCH (user:User)-[WRITES]-(myp:Post)<-[l:LIKES]-()
where user ="xyz"
RETURN myp,count(l) as count

我打算接收特定用户添加的 Post 和点赞数,然后将其转换为 C#。请帮忙。

查询在几个方面无效。

首先,您将整个用户节点与 WHERE 子句中的字符串 "xyz" 进行比较 - 您应该查询匹配的用户节点的属性。

其次,你在 WRITES 之前少了一个冒号,这意味着你实际上匹配的是 any 关系类型并给它变量名 WRITES在查询的其余部分。相反,您可能需要以下内容:

例如,假设用户节点有一个 'username' 属性:

MATCH (user:User)-[:WRITES]-(myp:Post)<-[l:LIKES]-()
WHERE user.username = "xyz"
RETURN myp, count(l) as count

此外,除非 WRITES 关系确实是无方向的(即 Post 节点可以以某种方式写入用户),否则您可能应该在该关系中包含一个箭头以限制搜索 space 一点:

MATCH (user:User)-[:WRITES]->(myp:Post)<-[l:LIKES]-()
WHERE user.username = "xyz"
RETURN myp, count(l) as count

如果你想 return 发帖,即使他们没有收到喜欢,我们需要从模式中删除 LIKES 关系并稍微不同地计算喜欢的数量:

MATCH (user: User)-[:WRITES]->(myp:Post)
WHERE user.username = "xyz"
RETURN myp, size((myp)<-[:LIKES]-()) as count