Search code examples
javagremlintinkerpop3

Group By Multiple Keys And Sum On Gremlin


I have a query like:

GraphTraversal t = graph.V().hasLabel("App").as("a")
        .inE("RANKS").as("r")
        .outV().as("k")
        .choose(__.select("k").by("countryCode").is(__.in(...)),
                __.math("1.0 / r").by("rank1"),
                __.math("1.0 / r").by("rank2"))
        .as("score")
        ...;

In here, I want to aggregate data like:

group by a.appId, k.countryCode, sum(score)

I tried like:

.group("a").by("appId").group("k").by("countryCode").by(...select("score").sum())

but this doesnt work.

Do you have any suggestion?

Solved like:

GraphTraversal t = graph.V().hasLabel("App").as("a")
        .inE("RANKS").as("r")
        .outV().as("k")
        .choose(__.select("k").by("countryCode").is(__.in(...)),
                __.math("1.0 / r").by("rank1"),
                __.math("1.0 / r").by("rank2"))
        .as("score")
    .select("a", "k").by("appId").by("countryCode")
                .group().by().by(__.select("score").sum().as("sum_score"))

Solution

  • Solved like:

    GraphTraversal t = graph.V().hasLabel("App").as("a")
            .inE("RANKS").as("r")
            .outV().as("k")
            .choose(__.select("k").by("countryCode").is(__.in(...)),
                    __.math("1.0 / r").by("rank1"),
                    __.math("1.0 / r").by("rank2"))
            .as("score")
        .select("a", "k").by("appId").by("countryCode")
                    .group().by().by(__.select("score").sum().as("sum_score"))