Filter Cypher查询试图获取具有三级连接的所有节点,而所有节点都遵循相同的约束

Filter Cypher查询试图获取具有三级连接的所有节点,而所有节点都遵循相同的约束,filter,graph,neo4j,nodes,where-clause,Filter,Graph,Neo4j,Nodes,Where Clause,我正在努力写这个问题 我想找到所有的工人, 他们有一级、二级和三级的朋友, 世卫组织遵循两个条件 但如果上述连接之一不适用于该条件, 我不希望它出现在输出中 例如: 这种关系就是朋友。 条件是: 城市:“新德里” 年龄>=29 朋友,朋友的朋友,朋友的朋友-方向无关 如果节点有一个不适用于条件的友元,即使它有另一个确实适用的路径,我也不想要它 此查询为我提供了所需的所有节点以及更多。。 它不会过滤那些与不符合条件的人有关系的人 我会更清楚: 应用条件的a-b-c-d路径将其标记为p a-q-w

我正在努力写这个问题

我想找到所有的工人, 他们有一级、二级和三级的朋友, 世卫组织遵循两个条件

但如果上述连接之一不适用于该条件, 我不希望它出现在输出中

例如: 这种关系就是朋友。 条件是: 城市:“新德里” 年龄>=29 朋友,朋友的朋友,朋友的朋友-方向无关 如果节点有一个不适用于条件的友元,即使它有另一个确实适用的路径,我也不想要它

此查询为我提供了所需的所有节点以及更多。。 它不会过滤那些与不符合条件的人有关系的人 我会更清楚:

应用条件的a-b-c-d路径将其标记为p a-q-w-v q或w或v不适用条件标记为N 因为P,a将出现在输出中,但是因为N,它不应该出现

我添加这张图片是为了进行图形解释 带黑色圆圈的标记是输出->链中的每个应用条件 绿色是应用的条件 红色不是

希勒尔、托尔和德罗。他们适用这些条件,但他们有朋友或朋友的朋友,或朋友的朋友或朋友的朋友。因此,它们不会出现在输出中

我的问题的答案是黑圈和上面的3个名字,我如何在没有这3个名字的情况下完成它


很抱歉,我在neo4j手册中尝试了所有额外的细节来寻找答案,但没有运气

您在文章末尾的逻辑非常混乱和不清楚。请写出解析的英语句子。我将这样说:您的查询在MATCH和WHERE子句中是对称的。这意味着任何匹配都将产生两行:(u1)-(u2)-(u3)-(u4)在您的查询中,当且仅当(u4)-(u3)-(u2)-(u1)在您的查询中时。如果您的数据中有循环,您的图形不会显示循环,但我不知道,那么您可以为每个匹配获得四行!在查询中引入方向以消除对称性可能是个好主意。嘿,谢谢你的评论,友谊的概念有循环:)我的查询没有给出我想要的答案,这就是为什么我试图在这里找到有助于提高我对neo4j知识的帮助。关键是,如果请求链中的某个人不符合要求,则该链中的任何人都不会出现在输出中。我在WHERE子句中添加了另一个解释,其中有一幅图片:)您可以使用
和not EXISTS()
之类的内容,并将内容放入其中,但这种方法可能不够灵活,无法满足您所描述的内容。老实说,我不知道怎么做你想做的事。也许你应该打电话给Neo4j支持部门,看看是否有人能帮你。
MATCH (u1)-[:friend]-(u2)-[:friend]-(u3)-[:friend]-(u4)
WHERE(u1.address = "New Delhi" AND u1.age >= 29)
AND (u2.address = "New Delhi" AND u2.age >= 29)
AND (u3.address = "New Delhi" AND u3.age >= 29)
AND (u4.address = "New Delhi" AND u4.age >= 29)
RETURN DISTINCT u3.name