我正在尝试为此处显示的演示新闻源实施喜欢机制http://docs.neo4j.org/chunked/stable/cypher-cookbook-newsfeed.html
所以基本上当用户点击状态更新时,我想将用户节点链接到状态更新节点。但是,我想通过作者的节点搜索状态更新节点。因此我使用如下内容:
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
基本上我想要实现的是,通过作者的节点找到状态更新节点,然后使用永久链接代码查找更新。
找到后,我想通过LIKED
关系将 liker 用户的节点连接到状态更新。
但是,你可能已经看到了这个密码的问题。
此cypher要求永久链接是与NEXT
关系连接的节点之一,否则如果第一个节点(由STATUSUPDATE
关系连接)包含永久链接,则会选择所有状态更新由NEXT
关系连接的节点。因此,用户最终会喜欢所有帖子。可能需要的是如下:
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
答案 0 :(得分:1)
这是一种解决问题的方法。
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条款的关系部分中的多重匹配,' m' node能够匹配状态更新链的任何部分。如果你真的要使用节点号(' id()'函数的输出)来获得你喜欢的用户节点,那么它可能会更快,如上所示。