Я использую Play-ReactiveMongo для взаимодействия с MongoDB... и мне интересно, как сравнить два даты, учитывая, что я не использую BSON в своем приложении. Позвольте мне привести вам пример:
def isTokenExpired(tokenId: String): Future[Boolean] = {
var query = collection.genericQueryBuilder.query(
Json.obj(
"_id" -> Json.obj("$oid" -> tokenId),
"expirationTime" -> Json.obj("$lte" -> DateTime.now(DateTimeZone.UTC))
)
).options(QueryOpts(skipN = 0))
query.cursor[JsValue].collect[Vector](1).map {
case Some(_) => true
case _ => false
}
}
isTokenExpired
работает не так, как ожидалось, поскольку expirationTime
считается String
. У меня есть неявный Writes
, который сериализует DateTime
как "yyyy-MM-ddTHH:mm:ss.SSSZ"
... и это правильно, так как мне нужен удобочитаемый JSON.
Тем не менее, как мне получить документ из коллекции, у которого DateTime
меньше, чем у другого DateTime
? Следующее не работает:
Json.obj(
"_id" -> Json.obj("$oid" -> tokenId),
"expirationTime" -> Json.obj("$lte" -> Json.obj("$date" -> DateTime.now(DateTimeZone.UTC).getMillis))
)
Спасибо.