我正在关注Neo4J在线教程,我在使用查询工具尝试此查询时遇到了一个问题:
match (a:Person)-[:ACTED_IN|:DIRECTED]->()<-[:ACTED_IN|:DIRECTED]-(b:Person)
return a,b;
我期待返回的其中一对在两个标识符中具有相同的Person,但这并没有发生。有人可以解释一下为什么吗?匹配子句是否排除使用的不同标识符中的重复元素?
更新: 这个问题来自&#34;第3课 - 与Cypher建立关系,更多&#34;来自Neo4J在线教程,其中提到了我上面提到的查询。 我将查询改进为以下问题,以便更直接地关注我的问题:
MATCH (a:Person {name:"Keanu Reeves"})-[:ACTED_IN]->()<-[:ACTED_IN]-(b)
RETURN a,b;
结果:
|---------------|--------------------|
| a | b |
|---------------|--------------------|
| Keanu Reeves | Carrie-Anne Moss |
| Keanu Reeves | Laurence Fishburne |
| Keanu Reeves | Hugo Weaving |
| Keanu Reeves | Brooke Langton |
| Keanu Reeves | Gene Hackman |
| Keanu Reeves | Orlando Jones |
|------------------------------------|
那么,为什么在a和b中没有基努·里维斯的排?他不应该同时兼顾两种关系:ACTED_IN?
答案 0 :(得分:1)
答案 1 :(得分:0)
我会检查你的数据样本。您的查询看起来对我来说效果很好。我复制了一个简单的数据集,这里验证它确实产生了你想要的对。
Joe在“Some Flick”中表演了
neo4j-sh (?)$ create (p:Person {name:"Joe"})-[:ACTED_IN]->(m:Movie {name:"Some Flick"});
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 2
Relationships created: 1
Properties set: 2
Labels added: 2
14 ms
但乔是如此多才多艺,他还执导了“Some Flick”。
neo4j-sh (?)$ match (p:Person {name: "Joe"}), (m:Movie {name: "Some Flick"}) create p-[:DIRECTED]->m;
+-------------------+
| No data returned. |
+-------------------+
Relationships created: 2
23 ms
那么我们所知道的演员/导演是谁?
neo4j-sh (?)$ match (a:Person)-[:ACTED_IN|:DIRECTED]->()<-[:ACTED_IN|:DIRECTED]-(b:Person)
> return a,b;
+-----------------------------------------------------+
| a | b |
+-----------------------------------------------------+
| Node[222128]{name:"Joe"} | Node[222128]{name:"Joe"} |
| Node[222128]{name:"Joe"} | Node[222128]{name:"Joe"} |
+-----------------------------------------------------+
2 rows
50 ms
当然是乔。