Neo4j cypher喜欢状态更新吗

Neo4j cypher喜欢状态更新吗,neo4j,cypher,Neo4j,Cypher,我正试图实现一个喜欢的机制,以演示新闻饲料在这里显示 基本上,当用户点击状态更新时,我想把用户节点链接到状态更新节点。但是,我想通过作者的节点搜索状态更新节点。因此,我使用如下内容: MATCH (n:user)-[:STATUSUPDATE]->(m)-[:NEXT*]->(o) WHERE n.username = "pewpewlasers" AND (m.permalink = "acode" OR o.permalink = "acode") MATCH (p:user)

我正试图实现一个喜欢的机制,以演示新闻饲料在这里显示

基本上,当用户点击状态更新时,我想把用户节点链接到状态更新节点。但是,我想通过作者的节点搜索状态更新节点。因此,我使用如下内容:

MATCH (n:user)-[:STATUSUPDATE]->(m)-[:NEXT*]->(o)
WHERE n.username = "pewpewlasers" AND (m.permalink = "acode" OR o.permalink = "acode")
MATCH (p:user)
WHERE id(p)=1,
CREATE (p)-[x:LIKED]->(o)
return x
MATCH (n:user)-[:STATUSUPDATE]->(m)-[:NEXT*]->(o)
WHERE n.username = "pewpewlasers" AND m.permalink = "acode"
-- IF THE ABOVE GIVES AN OUTPUT THEN --
   MATCH (p:user)
   WHERE id(p)=1,
   CREATE (p)-[x:LIKED]->(m)
   return x
-- ELSE --
   MATCH (n:user)-[:STATUSUPDATE]->(m)-[:NEXT*]->(o)
   WHERE n.username = "pewpewlasers" AND o.permalink = "acode"
   MATCH (p:user)
   WHERE id(p)=1,
   CREATE (p)-[x:LIKED]->(o)
   return x
基本上,我试图实现的是,通过作者的节点找到状态更新节点,然后使用永久链接代码查找更新

找到后,我希望通过
like
关系将liker用户节点连接到状态更新

然而,您可能已经看到了这个密码的问题

此密码要求永久链接是与
NEXT
关系连接的节点之一,否则,如果第一个节点(通过
STATUSUPDATE
关系连接)包含永久链接,它将选择通过
NEXT
关系连接的所有状态更新节点。因此,用户最终会喜欢所有帖子。可能需要的是以下内容:

MATCH (n:user)-[:STATUSUPDATE]->(m)-[:NEXT*]->(o)
WHERE n.username = "pewpewlasers" AND (m.permalink = "acode" OR o.permalink = "acode")
MATCH (p:user)
WHERE id(p)=1,
CREATE (p)-[x:LIKED]->(o)
return x
MATCH (n:user)-[:STATUSUPDATE]->(m)-[:NEXT*]->(o)
WHERE n.username = "pewpewlasers" AND m.permalink = "acode"
-- IF THE ABOVE GIVES AN OUTPUT THEN --
   MATCH (p:user)
   WHERE id(p)=1,
   CREATE (p)-[x:LIKED]->(m)
   return x
-- ELSE --
   MATCH (n:user)-[:STATUSUPDATE]->(m)-[:NEXT*]->(o)
   WHERE n.username = "pewpewlasers" AND o.permalink = "acode"
   MATCH (p:user)
   WHERE id(p)=1,
   CREATE (p)-[x:LIKED]->(o)
   return x

这里有一个解决你问题的方法

START p = node(1) // Do you really want to use node numbers?    
MATCH (n:user {username = 'pewpewlasers'})-[:STATUSUPDATE|:NEXT*]->(m {permalink : 'acode'})
CREATE (p)-[x:LIKED]->(m)

通过在MATCH子句的relationship部分使用“|”和multimatch,“m”节点可以匹配状态更新链的任何部分。如果您真的要使用节点编号(“id()”函数的输出)来获得您喜欢的用户节点,那么按照上面所示进行操作可能会更快。

谢谢,这是可行的。我已经修改了代码,所以它使用的是用户名,而不是节点号。还有一个问题。在我们实现
CREATE(p)-[x:liked]->(m)
之前,是否可以检查用户是否已经喜欢状态更新?