Neo4j - 了解cypher查询

时间:2014-11-19 12:08:59

标签: database graph neo4j cypher

我对Neo4j和Cypher很陌生。 我写了以下查询:

MATCH (tp: TPPRODUCT_VERSION {TPPRODUCTCODE: "Z1115"}) <-[:IS_TPBOMPARENT_OF]-(pv: PRODUCT_VERSION) <-[:IS_BOMPARENT_OF*..]-(parent: PRODUCT_VERSION) RETURN parent, pv, tp

结果如下: http://postimg.org/image/ve76qy977/

实际上我希望得到的所有Product_Versions与Z1115及其父母有[IS_TPBOMPARENT_OF]关系,无论他们是否有。

但相反,我只有这些PRODUCT_VERSIONs,所有父母都不会被忽视。

我希望你能听从我的想法! 非常感谢!如果有人可以帮助我,那就太好了! :)

问候沙克龙

1 个答案:

答案 0 :(得分:2)

所以你可能想要使用OPTIONAL MATCH

您的查询强制neo4j匹配某种模式。如果模式不存在,那么您将无法获得匹配的数据。在这种情况下,您需要所有PRODUCT_VERSION个,而不仅仅是那些有父母的人,也不是那些没有父母的人。{/ p>

请尝试使用此查询:

MATCH (tp: TPPRODUCT_VERSION {TPPRODUCTCODE: "Z1115"})<-[:IS_TPBOMPARENT_OF]-(pv: PRODUCT_VERSION)
OPTIONAL MATCH (pv)<-[:IS_BOMPARENT_OF*..]-(parent: PRODUCT_VERSION)
RETURN parent, pv, tp

这应该返回tp和所有pv个对象。但是它也会尝试进一步匹配pv个对象到parent个对象,如果它们存在则返回它们。但是,如果它们不存在,您仍然应该pv没有parent