我的Neo4J图形数据库中有两个节点,节点用户和节点视频,我想创建它们之间的关系。
节点用户肯定存在,但节点视频可能不存在。如果是这种情况,则应使用给定的id创建它,并且在创建它们之间的节点关系之后也会创建它。
我知道我可以先检查视频节点是否存在,如果它不存在,我可以先创建它。 但是可以创建视频节点(如果它还没有存在)以及用户和视频节点之间的关系可以在单个呼叫中完成吗?
此外,我必须防止某些并发请求在第一次请求完成作业之前创建相同的视频节点。
所以请告诉我如何实现这个要求。我是图形数据库概念和Neo4J的新手。
答案 0 :(得分:1)
当您使用Cypher且已经使用neo4j 2.0.0-M05时,您可以使用MERGE命令。
答案 1 :(得分:1)
根据Stefan Ambruster的提示,我研究了Cypher中的MERGE语句并创建单个语句调用,我实现了创建视频节点(如果不存在)的目标,之后创建了我的用户节点和视频节点之间的关系。
的Cypher:
MERGE (user:User {uuid : {user_uuid}})
ON CREATE user
SET user.uuid = {user_uuid}
MERGE (video:Video {id : {video_id}})
ON CREATE video
SET video.id = {video_id}
CREATE UNIQUE user-[:SHARED {ts : timestamp()}]->video
这种接缝有利于我的需要。我还保留我的用户节点(如果它不存在),而不仅仅是视频节点。
此aproach /声明是否有任何可能的改进或陷阱?