在我的申请中,我有一份车辆清单(汽车,卡车,公共汽车)。每个人都有一份乘客名单。其中一名乘客被标记为司机。我与每个拥有乘客关系和乘车关系的车辆有关。我还有一个“坏司机”清单。
我正在编写一个Cypher查询,它返回一个“乘坐”关系列表。但是,我不希望看到与“坏司机”相关的游乐设施。
这是一个有效的演示:http://console.neo4j.org/r/o7q858
在这种情况下,“坏驱动程序”用户是Car 2
的驱动程序。因此,我的结果应显示与Car 1
,Truck
和Bus
的驾驶关系,而不是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
仍然应该被包括在内。我做错了什么,如何创建一个返回正确结果的查询?
答案 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;作为司机。