我使用以下用于状态更新的密码
MATCH (n:user {username: "pewpewlasers"})-[k :STATUSUPDATE|:NEXT*]->(o {address: "234cgdsfg23"})
MATCH (p:user {username: "userThatLikedMyStatus"})
CREATE (p)-[x:LIKES]->(o)
return x
然而,在喜欢这篇文章之前,我想检查用户是否已经喜欢这篇文章。是否可以在同一查询中检查?基本上,我想检查MATCH (p:user {username: "userThatLikedMyStatus"})-[:LIKES]->(o)
CREATE
编辑:我忘记了一个重要的细节。对不起。我通常有关于LIKES关系的时间戳信息。我的查询实际上是这样的:
MATCH (n:user {username: "pewpewlasers"})-[k :STATUSUPDATE|:NEXT*]->(o {address: "234cgdsfg23"})
MATCH (p:user {username: "userThatLikedMyStatus"})
CREATE (p)-[x:LIKES {date: "TIMESTAMP"}]->(o)
return x
TIMESTAMP
值取决于帖子的喜欢时间。因此每次都会改变。由于每次都会更改,MERGE
始终会创建新关系。如果MERGE
存在CREATE
,无论LIKES
参数是什么,都有办法让date
忽略{{1}}吗?
答案 0 :(得分:2)
如果你不想在关系已经存在时做任何不同的事情,那么你可以使用Merge。
MATCH (n:user {username: "pewpewlasers"})-[k :STATUSUPDATE|:NEXT*]->(o {address: "234cgdsfg23"})
MATCH (p:user {username: "userThatLikedMyStatus"})
MERGE (p)-[x:LIKES]->(o)
return x
如果x不存在,现在就会存在。如果x确实存在,则不会创建新关系,并且将返回现有关系。如果要根据关系是否已存在执行任何操作,Merge命令还具有ON CREATE和ON MATCH语义。
编辑 - 合并并设置属性
不确定。假设您只想在初始创建关系时设置时间戳,那么您可以这样做。
MATCH (n:user {username: "pewpewlasers"})-[k :STATUSUPDATE|:NEXT*]->(o {address: "234cgdsfg23"})
MATCH (p:user {username: "userThatLikedMyStatus"})
MERGE (p)-[x:LIKES]->(o)
ON CREATE SET x.date = timestamp()
return x
因为Merge不包含date属性,所以任何现有LIKES关系(p和o之间)都将匹配且不创建任何关系。当然,如果不存在,将创建一个新的,此时您设置时间戳。