我具有以下节点类型和要查找的模式:
问题结果
答案(带有“标题”字段)
我想“通过“否”答案找到彼此相关的所有问题,并且对同一结果都回答“是”” –我怀疑数据库中有成百上千个这样的组,其中有些仅仅是两个节点大小,有些最多5或6个节点。不超过六个。
因此,我可以在2组中匹配所有由nos连接的答案:
(结果)<-[是]-(问题)-> [否]->(问题)-> [是]->(结果)
但我不知道如何将其应用于3或4组。我以为我也许可以做一个顺子:
(问题)<-[no] [0 .. *]-(问题)-并找到所有由nos连接的问题,然后在WHERE子句中添加类似WHERE的所有匹配问题,均指向->结果-但我没有想法如何用密码表达
有人可以帮忙吗?
[重新编辑]
这可能对您有用。
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
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句