如何减少Neo4j结果以排除与被阻止用户关联的节点?

时间:2015-11-25 19:08:11

标签: neo4j

在我的申请中,我有一份车辆清单(汽车,卡车,公共汽车)。每个人都有一份乘客名单。其中一名乘客被标记为司机。我与每个拥有乘客关系和乘车关系的车辆有关。我还有一个“坏司机”清单。

我正在编写一个Cypher查询,它返回一个“乘坐”关系列表。但是,我不希望看到与“坏司机”相关的游乐设施。

这是一个有效的演示:http://console.neo4j.org/r/o7q858

在这种情况下,“坏驱动程序”用户是Car 2的驱动程序。因此,我的结果应显示与Car 1TruckBus的驾驶关系,而不是Car 2

我开始使用如下所示的查询:

MATCH (u:User)<-[ride:ride]-(node)-[node_rel]->(node_user:User)
WHERE (u.name = "Me") 
  AND NOT (type(node_rel)= "passenger" AND node_rel.driver = TRUE AND node_user.name IN ["Bad Driver"])
RETURN DISTINCT ride, node

但是,Car 2仍然应该被包括在内。我做错了什么,如何创建一个返回正确结果的查询?

1 个答案:

答案 0 :(得分:0)

[EDITED]

这样做你想要的吗?

MATCH p=(u:User)<-[ride:ride]-(node)-[node_rel]->(node_user:User)
WHERE (u.name = "Me")
WITH ride, node, COLLECT({rel: node_rel, user: node_user}) AS data
WHERE NONE (x IN data 
            WHERE exists(x.rel.driver) AND x.rel.driver AND x.user.name = "Bad Driver")
RETURN ride, node;

它过滤掉每个node,其中包含&#34; Bad Driver&#34;作为司机。