Я использую реактивные игры с игровыми рамками. Я имел обыкновение иметь запрос, который использует структуру агрегации, и он работал как ожидалось. После обновления до версии 0.13.0 я получаю ошибки при выполнении запроса.
Класс выглядит так:
class Foo(
id: Option[UUID],
obj: UUID,
lm: Date
)
Я хочу дать запросу список идентификаторов UUID, которые соответствуют свойству obj
, но только самые последние согласно свойству lm
.
Результат этого запроса должен быть сопоставлен со списком класса Bar
, который выглядит следующим образом:
class Bar(
obj: UUID,
ts: Date
)
Запрос выглядит следующим образом (при условии, что col
представляет собой JSONCollection
объекта Foo
, а ids
представляет собой список UUID.
import col.BatchCommands.AggregationFramework._
col
.aggregate(
Match(Json.obj("obj" -> Json.obj("$in" -> ids.map(_.toString)))),
List(
Sort(Descending("lm")),
Group(JsString("$obj"))("obj" -> FirstField("obj"), "ts" -> FirstField("lm")),
Project(Json.obj("_id" -> 0, "obj" -> "$obj", "ts" -> "$ts"))
)
)
.map(_.head[Bar])
Это работало, как и ожидалось, до обновления до 0.13.0. Чтобы быть более точным, я использую плагин реактивной игры 0.13.0-play26
Ошибка теперь выглядит так:
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[DefaultJSONCommandError: CommandError[code=<unknown>, errmsg=<unknown>, doc: {"obj":"a797ec90-80d7-4b5e-b144-2454436f2b16","ts":1526390247074}]]]
К сожалению, я не смог найти документацию на сайте responsetivemongo, похоже, документы не обновлялись с 0.11.x
При использовании Mongo Cli запрос выглядит так:
db.Foo.aggregate([{ $match: { obj: { $in: ["<uuid>", "<uuid>"] } } },{ $sort: { lm: -1 } },{ $group: { _id: "$obj", ts: { $first: "$ts" } } }]);
и это дает мне правильный результат.
Может кто-нибудь дать мне подсказку, что я тут не так делаю?