0

我的 Neo4J 图形数据库中有两个节点,节点用户和节点视频,我想在它们之间创建关系。

节点用户肯定存在,但节点视频可能不存在。如果是这种情况,则应使用给定的 id 创建它,并且在创建它们之间的节点关系之后也会创建它。

我知道我可以先检查 Video 节点是否存在,如果不存在我可以先创建它。但是视频节点的创建(如果它不存在的话)以及用户和视频节点之间的关系可以在一次调用中完成吗?

此外,我必须防止某些并发请求在第一次请求完成作业之前创建相同的视频节点。

所以请给我一些想法如何实现这个要求。我对图形数据库概念和 Neo4J 非常陌生。

4

2 回答 2

1

根据 Stefan Ambruster 的提示,我研究了 Cypher 中的 MERGE 语句并创建了单个语句调用,使用它实现了创建视频节点(如果不存在)的目标,然后在我的用户节点和视频节点之间创建关系。

暗号:

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

这看起来很适合我的需要。如果我的用户节点不存在,我还保留创建它,而不仅仅是视频节点。

这种方法/声明是否有任何可能的改进或缺陷?

于 2013-09-26T16:14:57.547 回答
1

当您使用 Cypher 并且您已经在 neo4j 2.0.0-M05 上时,您可以使用MERGE命令。

于 2013-09-25T16:49:51.233 回答