0

What's the most efficient way to compare 2 aggregates (set of vertices) and see if they contain the exact same results?

Using this doesn't seem to work:

.where(select('aggregate1').is(eq('aggregate2')))

aggregate1 and aggregate2 each one contains a bunch of vertices.

1 Answer 1

1

Evaluating equality of two sets should work, but they will both likely need to be ordered sets. Examples

g.inject([1,2,3]).is(eq([1,2,3]))

... provides a match and returns ...

1   [1, 2, 3]

However, if I change the order of the second set, as in...

g.inject([3,2,1]).is(eq([1,2,3]))

... then nothing gets returned (showing non-equivalence).

You would need to insert an order(local) into the query to ensure the first set is ordered to match the second:

g.inject([3,2,1]).order(local).is(eq([1,2,3]))

Returns:

1   [1, 2, 3]

As an aside...

If looking for the difference between the two, you could use where(within('x')) or where(without('x')) as a way to see the intersection or complement respectively.

As an example using the airroutes dataset, if I wanted to find the common destination airports flying from MLI and ABE, I could use the following query:

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')

Returns result:

1   PIE
2   ATL
3   ORD
4   SFB
5   DTW

If I wanted to see which destination airports are in one set but not the other, I could use:

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')

Result:

1   CLT
2   MYR
3   BNA
4   FLL
5   PGD
6   PHL
2
  • Thanks Taylor, yes eq doesn't help but using where(without( solved it for me.
    – Amin
    Commented Mar 20 at 20:51
  • To be specific, I had to use a choose combined with where, without and count
    – Amin
    Commented Mar 20 at 20:54

Not the answer you're looking for? Browse other questions tagged or ask your own question.