如何在neo4j中使用带有输入参数的展开功能?

时间:2019-04-02 22:21:33

标签: neo4j cypher

我正在尝试使用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)

我已经尝试了很多事情,但是在这里我无法解决问题。有什么想法吗? 预先谢谢你

1 个答案:

答案 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)