我有以下节点类型和要查找的模式:
问题 结果
答案(带有'标题'字段)
我想通过" no"找到所有相互关联的问题。答案,所有人都有"是"回答相同的结果" - 我怀疑我的数据库中有数百个这样的组,有些只是两个节点,有些节点最多有5个或6个节点。没有大于六。
所以我可以在2组中匹配nos加入的所有答案:
(结果)< - ; [无] - GT; [是] - - (问题)GT(问题) - > [是] - GT;(结果)
但我无法弄清楚如何将其应用于3组或4组。我想我也许可以直截了当地说:
(问题)< - [no] [0 .. *] - (问题) - 找到所有由nos加入的问题,然后在WHERE子句中添加类似WHERE 的所有匹配问题指向 - >结果 - 但我不知道如何在密码中表达
有人可以帮忙吗?
答案 0 :(得分:1)
[RE-RE-EDITED]
这可能适合你。
MATCH p=(oc:Outcome)<-[:Answer {title: 'yes'}]-(q1:Question)-[:Answer* {title: 'no'}]->(q2:Question)-[:Answer {title: 'yes'}]->(oc)
WHERE
NOT (
(oc)<-[:Answer {title: 'yes'}]-(:Question)-[:Answer {title: 'no'}]->(q1) OR
(q2)-[:Answer {title: 'no'}]->(:Question)-[:Answer {title: 'yes'}]->(oc)
) AND
ALL(q IN NODES(p)[1..-1] WHERE (q)-[:Answer {title: 'yes'}]->(oc))
RETURN oc, NODES(p)[1..-1] AS questions;
NOT (...)
子句中的WHERE
字词用于确保我们仅使用最长的有效序列Questions
。
每个结果行包含一个共享结果和一个有序的Question节点集合。
此查询可能需要很长时间才能完成,因为它没有指定可变长度模式的上限。如果这是一个问题,您可能需要指定适当的上限(例如,Answer*..5
)。