4

http://console.neo4j.org/r/yx62bk

在上图中,查询

start n=node(7,8,9) 
match n-[objectScore:score]->o-[:object_of_destination]->d<-[:destination_score]-n, 
o-[:instance_of]->ot, o-[:date]->oDate, d-[:date]->dDate where ot.name='HOTEL'  
return n, o, objectScore,  d;

将 o 返回为空。

更改查询以删除关系标识符 - objectScore

start n=node(7,8,9) 
match n-[:score]->o-[:object_of_destination]->d<-[:destination_score]-n,
o-[:instance_of]->ot, o-[:date]->oDate, d-[:date]->dDate where ot.name='HOTEL'  
return n, o, objectScore,  d;

并且输出正确返回 o 节点。

对于我的场景,我需要它们。不知道该怎么做?对此有任何建议。

4

1 回答 1

0

很好的发现。我们在 github 上跟踪 Cypher 问题,所以我在那里打开了一个关于它的问题:https ://github.com/neo4j/community/issues/837

非常感谢您的报告!

编辑:我发现了问题。具有讽刺意味的是,一个简单的解决方法是引入可选关系。问题出在 Cypher 可以使用的匹配器之一中,并且通过将模式的一部分标记为可选,您可以强制 Cypher 使用不同的匹配器。如果你想

因此,将您的 MATCH 更改为:

match n-[objectScore:score]->o-[:object_of_destination]->d<-[:destination_score]-n, 
      o-[:instance_of]->ot, 
      o-[:date]->oDate, 
      d-[?:date]->dDate 

一个真正的解决方案正在进行中。

于 2012-08-30T19:32:55.047 回答