AND运算符不在Neo4j中使用type(r)

时间:2016-04-15 07:57:45

标签: neo4j cypher

在Neo4j作为示例图表附带的电影图表中,我想查询:获取由导演The Matrix电影的同一人指导和编写的电影。 这是我正在使用的查询

Match(m:Movie{title:'The Matrix'})<-[r:DIRECTED]-(p:Person)-[r2]->(n:Movie)
where type(r2)='DIRECTED' and type(r2)='WROTE' 
return p,n

此查询无效但如果我将OR子句而不是AND子句。它会工作。使用OR子句向我提供由导演The Matrix电影的同一导演编写或指导的电影列表。请让我知道为什么AND子句不适用于类型(r)。

2 个答案:

答案 0 :(得分:2)

如果您在人物和电影之间同时拥有DIRECTED和WROTE两种关系,那么您将拥有两条结果线,而不是一条。 像

a |type(r) |b
a |DIRECTED|b
a |WROTE   |b

所以当你设置或者,你得到两条线。但是当你说并且你实际上什么都没有因为同时指导&lt;&gt;(指导和写) 如果你的意思是人和电影之间应该有DIRECTED和WROTE关系,那么查询应该是

Match (m:Movie{title:'The Matrix'})<-[r:DIRECTED]-(p:Person)-[r2:DIRECTED]->(n:Movie), 
      (p)-[r3:WROTE]->(n) 
return p,n

答案 1 :(得分:1)

这可能是查找所有由“黑客帝国”导演编写和导演的电影的最简单的查询:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    SSPhotoSelectionViewController *controller = (SSPhotoSelectionViewController *) segue.destinationViewController;
    if ([segue.identifier isEqualToString:@"SelectPhotosSegue"]) { 
        if (self.albumsButton.selected) {
           [controller.downloadButton setText:SSPhotosButtonTextAdd];
        }
        else if (self.galleryButton.selected) {
            [controller.downloadButton setText:SSPhotosButtonTextDownload];
        }
    }
}