获取关系中的所有节点,而不是所有节点

时间:2018-01-02 14:51:49

标签: neo4j cypher

我实际上是在尝试做这样的请求。 我想要:

  • 所有地理点。
    • 从他们(Geo)我想要他们所有的网络系统(NS)。
      • 从他们(NS)我想要他们所有的机器。
        • 从他们(机器)我想要他们所有的VLAN。
      • 从他们(NS)我想要他们所有的网络系统。
      • 从他们(NS)我想要他们所有的网络系统,但没有机器。

我的节点:

  • 地理
  • NS
  • VLAN

我的关系:

  • GeoNS
  • MachNS
  • NSNS
  • VLANMach

现在我有这个问题:

MATCH (a:Geo)-[b:GeoNS]-(c:NS)
OPTIONAL MATCH (c)-[d:MachNS]-(e:Machine)-[f:VLANMach]-(g:VLAN)
OPTIONAL MATCH (c)-[h:NSNS]-(i:NS)
OPTIONAL MATCH (c)-[p:NSNS]-(q:NS)
return a

但是正如您所看到的,最后一个可选匹配基于具有计算机的NS。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您的上一个OPTIONAL MATCH可以使用WHERE子句过滤掉q关系MachNS的节点:

OPTIONAL MATCH (c)-[p:NSNS]-(q:NS)
WHERE NOT (q)-[:MachNS]-()

顺便说一句,您的RETURN子句无效,因为查询未定义s变量。此外,查询应该返回所有匹配的结果。