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

Neo4j 查找相关节点集之间差异的Cypher查询,neo4j,cypher,Neo4j,Cypher,我正在使用Neo4J存储一些夜间自动测试的测试结果。我有代表可以运行的测试的节点(:Test),代表一组测试的运行的节点(:run)。每个(:Run)都与现有(:Test)节点有关系,表示“通过”或“失败”,即: 我希望能够构造一个密码查询,可以查看两个(:Run)节点并返回它们之间的差异——具体确定它们之间不同的(:Test)节点,并指出这些差异的关系(通过/失败) 我知道这可以在Neo4J之外完成,但我希望找到一个解决方案,在Neo4J内完成尽可能多的工作。假设您对Run1和Run2之间的

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

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


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

假设您对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;

MATCH(a:Run)-[x]->(t:Test)假设您对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;
MATCH(a:Run)-[x]->(t:Test)试试这个大小。
基本上匹配每个测试的路径,也可以选择从另一个运行中匹配同一个测试,然后比较关系的类型(在本例中是通过还是失败),并输出不同的测试

这里是控制台的链接

MATCH p1=(a1:Run{name:'Run2'})-[r1]>(t1:Test)
可选匹配p2=(a2:运行{name:'Run1})-[r2]-(t1)
类型(头(关系(p1))为lbl1,类型(头(关系(p2))为lbl2,t1)
其中,lbl2为NULL或lbl1 lbl2
返回“测试结果与测试不匹配:”+t1.name
不过有一点值得注意。如果运行1与运行2和运行2与运行1相反,而后者有更多的测试,则结果会有所不同。试着穿上这件衣服看看大小。
基本上匹配每个测试的路径,也可以选择从另一个运行中匹配同一个测试,然后比较关系的类型(在本例中是通过还是失败),并输出不同的测试

这里是控制台的链接

MATCH p1=(a1:Run{name:'Run2'})-[r1]>(t1:Test)
可选匹配p2=(a2:运行{name:'Run1})-[r2]-(t1)
类型(头(关系(p1))为lbl1,类型(头(关系(p2))为lbl2,t1)
其中,lbl2为NULL或lbl1 lbl2
返回“测试结果与测试不匹配:”+t1.name

不过有一点值得注意。如果运行1与运行2和运行2与运行1相反,且后者有更多测试,则结果会有所不同

您的示例数据中没有任何测试结果不同的实例。这是故意的吗?哦,你是对的。不是故意的。出于各种原因,我不得不重新创建我的示例,而上一个版本似乎有太多的剪切粘贴。我希望至少有一个结果是不同的。您的示例数据中没有任何测试结果不同的实例。这是故意的吗?哦,你是对的。不是故意的。出于各种原因,我不得不重新创建我的示例,而上一个版本似乎有太多的剪切粘贴。我希望至少有一个结果是不同的。您的查询不会返回一次运行根本没有连接到测试的情况,对吗?仅当两者都连接时。@MartinPreusse Yes。但这似乎不是OP想要的。仅针对通过/失败的差异。可能。我考虑了一会儿,也没有想出一个好办法来获得这些结果。只是好奇而已。您的查询不会返回一次运行根本没有连接到测试的情况,对吗?仅当两者都连接时。@MartinPreusse Yes。但这似乎不是OP想要的。仅针对通过/失败的差异。可能。我考虑了一会儿,也没有想出一个好办法来获得这些结果。只是好奇而已。