Neo4j混合节点有和没有扩展关系

时间:2016-05-09 07:01:26

标签: neo4j

我有一个简单的社交流,其中很少有节点和关系如下所示:

row 1: (a) -> (stream) -> (d)
row 2: (a) -> (stream) -> (d) -> (source)

基本上我想拉两行但是对源的类型有一些限制,例如我目前使用它:

MATCH (a)-[]->(stream)-[]->(d)
OPTIONAL MATCH (d)-[]->(source)
    WHERE source.x = 3
RETURN stream, d, source

这很有效。几乎。当source.x = 3时,我得到两行。哪个是完美的。但是当source.x!= 3时,我希望查询忽略第二行,但由于可选匹配,行仍然会出现。

When source.x = 3
row 1. stream, d, null
row 2. stream, d, source

When source.x != 3
row 1. stream, d, null
row 2. stream, d, null

当source.x!= 3时,我希望查询忽略第二行。因为它包含(源)节点但不包含我们想要的节点。输出应如下所示:

row 1. stream, d, null

基本上类似于if(source)不存在的行显示行..如果确实存在,仅在source.x = 3时显示行

编辑:根据评论中的建议,我附上了一个简化的例子。 Simplified example

1 个答案:

答案 0 :(得分:1)

您可以使用MATCH (me:User {name:'me'})-[:LIKES]->(transport) OPTIONAL MATCH (transport)-[:HAS_DRIVER]->(driver:Driver {name:'Anne'}) WITH me, transport, driver WHERE (NOT (transport)-[:HAS_DRIVER]->()) OR (NOT driver IS NULL) RETURN me, transport, driver select_tag 'date_month', options_for_select((1..12).collect{ |i| "%02d" % i }) 子句管道结果进行过滤,然后再返回:

{{1}}