我有这样的功能:
void addRelation(string userId,List<string> friends)
{}
我想在朋友中添加userId和element之间的关系。现在我的解决方案是为每对增加关系,但我发现效率很低。如何在一个操作中添加多个关系,如批处理?
答案 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"]} }]'