rethink-scala icon indicating copy to clipboard operation
rethink-scala copied to clipboard

Grouping and couting data

Open gstraymond opened this issue 9 years ago • 1 comments

Hi,

I try using group() and count() on a table like : https://www.rethinkdb.com/api/java/group/

r.table("matches").group(
    match -> r.array(match.g("date").year(), match.g("date").month())
).count().run(conn);
[
    {
        "group": [2014, 2],
        "values": 2
    },
    {
        "group": [2014, 3],
        "values": 2
    },
    ...
]

The goal is to simply group data by a field and count grouped occurences. In my code, this looks like :

def getLeaderboard: Future[Double] = {
    r.table("stats").group("userId").count().run
}

First problem, to make code compile to function must return a Future[Double], I would expect something like Future[Map[String, Double]] or Future[Seq[(String, Double)]]. Then, when I try to run the code and get this in return (this is logic since the return type is not correct) :

RethinkRuntimeError: Can not deserialize instance of java.lang.Double out of START_OBJECT token at 
[Source: {"t":1,"r":[{"$reql_type$":"GROUPED_DATA","data":[["foo",143]]}]}; line: 1, column: 13] 
(through reference chain: com.rethinkscala.net.JsonResponse["r"]->com.fasterxml.jackson.module.scala.deser.BuilderWrapper[0])]

I think the request is good, since in the error I can see the data grouped and counted.

BTW, I'm using : "com.rethinkscala" %% "core" % "0.4.8-SNAPSHOT"

Any help appreciated !

gstraymond avatar Jan 22 '16 15:01 gstraymond

Group and ungroup have always been a problem to support due to the ability to group by different data types. I'll take another look into this to see if I can at least provide some casting methods so the user can instruct the driver of the correct type when it fails to pick the correct type.

kclay avatar Jan 25 '16 14:01 kclay