如何在neo4j中的一个操作中添加多个关系?

时间:2014-04-26 02:43:17

标签: neo4j

我有这样的功能:

void addRelation(string userId,List<string> friends)
{}

我想在朋友中添加userId和element之间的关系。现在我的解决方案是为每对增加关系,但我发现效率很低。如何在一个操作中添加多个关系,如批处理?

1 个答案:

答案 0 :(得分:0)

以下答案不是基于C#,而是假设您在Neo4j 2.x上运行。

最简单的解决方法可能是使用带参数的单个Cypher语句:

MERGE (u:User {userId:{userId}}) 
FOREACH (f in {friends} | MERGE (u)-[:FRIEND_OF]->(:User {userId:f}))

参数(采用JSON表示法)为:

{"userId":"u1", "friends": ["friend1", "friend2"]} }]

使用第一个MERGE,确保您的用户节点存在(如果您确定,则可以将MERGE替换为MATCH)。第二行迭代您的friends参数并为每个朋友创建目标节点(除非它存在)并将用户与朋友连接。

由于我对C#缺乏了解,我不知道如何将Cypher语句发送到您的服务器,但我可以使用httpie命令行http客户端使用事务性http端点为您举例说明Neo4j的:

http -b -j localhost:7474/db/data/transaction/commit statements:='[{"statement": "MERGE (u:User {userId:{userId}}) FOREACH (f in {friends} | MERGE (u)-[:FRIEND_OF]->(:User {userId:f}))", "parameters": {"userId":"u1", "friends": ["friend1", "friend2"]} }]'