比较 2 个聚合(顶点集)并查看它们是否包含完全相同的结果的最有效方法是什么?
使用这个似乎不起作用:
.where(select('aggregate1').is(eq('aggregate2')))
aggtegate1 和aggregate2 每个都包含一堆顶点。
评估两个集合的相等性应该可行,但它们可能都需要是有序集合。例子
g.inject([1,2,3]).is(eq([1,2,3]))
...提供匹配并返回...
1 [1, 2, 3]
但是,如果我改变第二组的顺序,就像......
g.inject([3,2,1]).is(eq([1,2,3]))
...然后什么也没有返回(显示不等价)。
您需要在查询中插入
order(local)
,以确保第一组的顺序与第二组匹配:
g.inject([3,2,1]).order(local).is(eq([1,2,3]))
退货:
1 [1, 2, 3]
顺便说一句...
如果要寻找两者之间的差异,您可以使用
where(within('x'))
或 where(without('x'))
来分别查看交集或补集。
作为使用航线数据集的示例,如果我想查找从 MLI 和 ABE 出发的常见目的地机场,我可以使用以下查询:
g.V().hasLabel('airport').has('code','MLI').
out('route').
aggregate('mlir').limit(1).
V().hasLabel('airport').has('code','ABE').
out('route').
aggregate('aber').
where(within('mlir')).values('code')
返回结果:
1 PIE
2 ATL
3 ORD
4 SFB
5 DTW
如果我想查看哪些目的地机场属于一组而不是另一组,我可以使用:
g.V().hasLabel('airport').has('code','MLI').
out('route').
aggregate('mlir').limit(1).
V().hasLabel('airport').has('code','ABE').
out('route').
aggregate('aber').
where(without('mlir')).values('code')
结果:
1 CLT
2 MYR
3 BNA
4 FLL
5 PGD
6 PHL