我对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,所有父母都不会被忽视。
我希望你能听从我的想法! 非常感谢!如果有人可以帮助我,那就太好了! :)
问候沙克龙
答案 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
。