Neo4j 当我们不';不要使用方向

Neo4j 当我们不';不要使用方向,neo4j,cypher,Neo4j,Cypher,我对通过cypher建立关系的方式感到困惑。我的印象是,[u src-[:likes]-[u dst创建了一个双向关系,但看起来情况并非如此,因为[u src-[:likes]-[u dst==[u src') 我的印象是这样的,你告诉neo4j建立一种双向关系。现在,看看下面的查询 neo4j-sh (?)$ start n=node(*) match n-[:likes]->m where has(n.type) and n.type='User' return n,m; ==>

我对通过cypher建立关系的方式感到困惑。我的印象是,[u src-[:likes]-[u dst创建了一个双向关系,但看起来情况并非如此,因为[u src-[:likes]-[u dst==[u src'

我的印象是这样的,你告诉neo4j建立一种双向关系。现在,看看下面的查询

neo4j-sh (?)$ start n=node(*) match n-[:likes]->m where has(n.type) and n.type='User' return n,m;
==> +-------+
==> | n | m |
==> +-------+
==> +-------+
==> 0 row 
但事实恰恰相反

neo4j-sh (?)$ start n=node(*) match n-[r]->m where has(n.type) and n.type="Item" return n,m limit 3;
==> +-----------------------------------------------------------------------------------------+
==> | n                                          | m                                          |
==> +-----------------------------------------------------------------------------------------+
==> | Node[7]{type:"Item",name:"f1",itemId:"f1"} | Node[4]{type:"User",name:"u4",userId:"u4"} |
==> | Node[7]{type:"Item",name:"f1",itemId:"f1"} | Node[3]{type:"User",name:"u3",userId:"u3"} |
==> | Node[7]{type:"Item",name:"f1",itemId:"f1"} | Node[2]{type:"User",name:"u2",userId:"u2"} |
==> +-----------------------------------------------------------------------------------------+ 

问题是为什么a-[:likes]-b=a不能使用_src[:likes]-u dst创建双向关系

在Neo4j中,关系可以而且必须只有一个方向。因此,要表示双向,您有两个选项:

a) 创建与方向的关系,但在查询时忽略(_src[:likes]-_dst将在匹配子句的一部分中匹配两个方向)

b) 创建两个关系-两个方向各一个


如果执行创建时没有诸如_src[:likes]-_dst之类的方向,则会为_src创建传入关系

,您无法使用_src[:likes]-_dst创建双向关系

在Neo4j中,关系可以而且必须只有一个方向。因此,要表示双向,您有两个选项:

a) 创建与方向的关系,但在查询时忽略(_src[:likes]-_dst将在匹配子句的一部分中匹配两个方向)

b) 创建两个关系-两个方向各一个

如果执行create时没有诸如_src[:likes]-_dst之类的方向,则会为_src创建传入关系

neo4j-sh (?)$ start n=node(*) match n-[r]->m where has(n.type) and n.type="Item" return n,m limit 3;
==> +-----------------------------------------------------------------------------------------+
==> | n                                          | m                                          |
==> +-----------------------------------------------------------------------------------------+
==> | Node[7]{type:"Item",name:"f1",itemId:"f1"} | Node[4]{type:"User",name:"u4",userId:"u4"} |
==> | Node[7]{type:"Item",name:"f1",itemId:"f1"} | Node[3]{type:"User",name:"u3",userId:"u3"} |
==> | Node[7]{type:"Item",name:"f1",itemId:"f1"} | Node[2]{type:"User",name:"u2",userId:"u2"} |
==> +-----------------------------------------------------------------------------------------+ 
    create (_u7 {type:"User",`name`:"u7",userId:'u7' });
    create (_f7 {type:"Item",`name`:"f7",itemId:'f7' });
 start src=node(*),dst=node(*) where src.name='u7' and dst.name='f7' create src-[:likes{likeValue:3}]-dst;
    neo4j-sh (?)$ start n=node(*) match n-[r]->m where has(n.type) and n.type="User" return n,m limit 3;
    ==> +-------+
    ==> | n | m |
    ==> +-------+
    ==> +-------+
    ==> 0 row 
create (_u {type:"User",`name`:"u8",userId:'u8' })  , (  _f {type:"User",`name`:"f8",userId:'f8'} ), _u-[:likes{likeValue:2}]-_f;
neo4j-sh (?)$ start n=node(*) match n-[r]->m where has(n.type) and n.type="User" return n,m limit 3;
==> +-------------------------------------------------------------------------------------------+
==> | n                                           | m                                           |
==> +-------------------------------------------------------------------------------------------+
==> | Node[19]{type:"User",name:"f8",userId:"f8"} | Node[18]{type:"User",name:"u8",userId:"u8"} |
==> +-------------------------------------------------------------------------------------------+