Cypher查询以查找相关节点集之间的差异

时间:2015-07-01 15:59:04

标签: neo4j cypher

我正在使用Neo4J存储一些夜间自动化测试的测试结果。我有节点代表可以运行的测试(:Test),代表一组测试运行的节点(:Run)。每个(:Run)都与现有(:Test)节点有关系,以表示" PASS"或" FAIL",即:

http://console.neo4j.org/?id=9hj4w4

我希望能够构建一个可以查看两个(:Run)节点的cypher查询并返回它们之间的差异 - 具体确定它们之间不同的(:Test)节点,并指出关系(通过/失败)了解这些差异。

我知道它可以在Neo4J之外完成,但我希望找到一个能够在Neo4J中尽可能多地完成工作的解决方案。

2 个答案:

答案 0 :(得分:0)

让我们说您对Run1和Run2之间的测试差异感兴趣。你可以这样做:

MATCH (a:Run)-[x]->(t:Test)<-[y]-(b:Run)
WHERE a.name = "Run1" AND b.name = "Run2" AND TYPE(x) <> TYPE(y)
RETURN a.name, TYPE(x), t.name, TYPE(y), b.name
ORDER BY t.name;

不幸的是,您的示例数据没有任何实例(在任何两次运行之间),其中同一测试有不同的结果。我制作了一个新的示例数据集,以便我们实际获得结果:http://console.neo4j.org/?id=wlx859

答案 1 :(得分:0)

尝试这个尺寸。
基本上匹配每个测试的路径,并可选地匹配来自另一个运行的相同测试,然后比较关系类型(在这种情况下为pass和fail)并输出不同的测试。

这是指向控制台borrowed the data from Nicole

的链接
MATCH p1 =(a1:Run { name:'Run2' })-[r1]->(t1:Test)
OPTIONAL MATCH p2=(a2:Run { name:'Run1' })-[r2]-(t1)
WITH type(head(relationships(p1))) AS lbl1,type(head(relationships(p2))) AS lbl2, t1
WHERE lbl2 IS NULL OR  lbl1 <> lbl2
RETURN 'Test result mismatched on test: ' + t1.name
但是,有一点需要注意。当你要求run1与run2和run2 vs run1的反转时,结果会有所不同,后者有更多的测试