我正在尝试使用cypher进行此查询。我想在节点之间建立关系。
我尝试过放松,foreach和其他东西。我已经尝试了两天,但我不知道该怎么做。
WITH
[
{
sender: 416,
target: 400,
bidirectional: true
},
{
sender: 416,
target: 509,
bidirectional: true
},
{
sender: 416,
target: 413,
bidirectional: true
}
] as relationships
unwind relationships as relation
match (s),(t)
where id(s)=relation.sender and id(t)=relation.target
case relation.bidirectional
when true
merge (s)<-[:REL]->(t)
else
merge (s)-[:REL]->(t)
我已经尝试了很多事情,但是在这里我无法解决问题。有什么想法吗? 预先谢谢你
答案 0 :(得分:0)
neo4j中的所有关系都是单向的。如果您不在乎使用哪个方向,MERGE
允许您从模式中省略该方向(或者甚至在两个方向上都放箭头-这有点奇怪和误导),但是只有一种关系会被创建(如果需要),它将是单向的。因此,bidirectional
标志是完全不必要的-您可以始终使关系朝同一方向前进。
此外,CASE
表达式无法执行数据库读取或写入。
此查询(甚至不需要CASE
表达式)更有意义,并且可以运行:
WITH
[
{
sender: 416,
target: 400
},
{
sender: 416,
target: 509
},
{
sender: 416,
target: 413
}
] as relationships
UNWIND relationships as relation
MATCH (s), (t)
WHERE id(s)=relation.sender AND id(t)=relation.target
MERGE (s)-[:REL]->(t)