Neo4j 返回like count和当前用户是否喜欢Cypher中的帖子

Neo4j 返回like count和当前用户是否喜欢Cypher中的帖子,neo4j,Neo4j,我有一个可能是头晕目眩的问题,但我刚刚开始学习Neo4j,我希望有人能帮助我学习Cypher语法,我刚刚开始学习和评估 我有两个用户节点和一个新闻发布节点。两个用户都喜欢这篇新闻。我可以构造一个密码查询来计算帖子的喜欢度,但我想知道是否也可以检查当前用户是否喜欢同一查询中的帖子 到目前为止,我对密码查询的理解是 match (p:NewsPost)<-[r:LIKES]-(u:User) where id(p) = 1 return p, count(*) match(p:NewsPos

我有一个可能是头晕目眩的问题,但我刚刚开始学习Neo4j,我希望有人能帮助我学习Cypher语法,我刚刚开始学习和评估

我有两个用户节点和一个新闻发布节点。两个用户都喜欢这篇新闻。我可以构造一个密码查询来计算帖子的喜欢度,但我想知道是否也可以检查当前用户是否喜欢同一查询中的帖子

到目前为止,我对密码查询的理解是

match (p:NewsPost)<-[r:LIKES]-(u:User)
where id(p) = 1
return p, count(*)

match(p:NewsPost)您要查找的是

在您的数据库中,您应该为每个用户提供唯一的内容(id属性、电子邮件或登录,我不知道),因此您必须匹配此用户,然后匹配与所需帖子的关系,使用case可以返回布尔值

例子:
如果您想直接获取关系(例如获取其中的属性),您可以删除CASE部分并直接返回r,如果它不存在,
null
将从查询中返回。

对您的查询进行的最小更改是为喜欢新闻帖子的特定用户添加真/假测试

MATCH (p:NewsPost)<-[r:LIKES]-(u:User)
WHERE ID(p) = 1
RETURN p, count(r), 0 < size(p<-[:LIKES]-(:User {email:"michael@nero.com"}))

MATCH(p:NewsPost)你所说的“当前用户”是什么意思?这是用户节点上的属性吗?嗨@jjaderberg,我的意思是当前登录的用户。但是在这个练习中,我们可以只匹配用户节点上的“email”属性。这确实有效,但是你说我可以做“最小的更改”。你会建议做更大的改变吗?此外,我没有看到在中记录的大小运算符。你知道在哪里可以找到它的文档吗?我所说的最小变化是指我的答案试图清楚地说明一种“技术”,但同样的结果可以通过其他方式实现。F.i.,您可以在查询的顶部将用户匹配为
u2
,并执行
0size()
是在哪里记录的。我是从Michael Hunger那里学来的。据说它比其他方法(比如计算路径)更快因为它是如何实现的,但我不记得读过任何文档。有一些类似的东西(正则表达式语法、运算符优先级)这似乎逃过了手册——如果你觉得很努力,也许你可以确认它是否有文档记录,如果没有,你可以提出一个github问题?或者,如果你找到了,用链接编辑我的答案。有,它至少看起来与大小的作用相同。因为我在猜测,我不会编辑你的答案,直到you或其他人确认它们在功能上是等效的。这不一样,我会留意记录它的东西,无论是官方的还是非官方的。
MATCH (p:NewsPost)<-[r:LIKES]-(u:User)
WHERE ID(p) = 1
RETURN p, count(r), 0 < size(p<-[:LIKES]-(:User {email:"michael@nero.com"}))