Json ReactiveMongo&;播放:如何比较两个DateTime实例

Json ReactiveMongo&;播放:如何比较两个DateTime实例,json,mongodb,scala,playframework,reactivemongo,Json,Mongodb,Scala,Playframework,Reactivemongo,我经常和MongoDB互动。。。考虑到我的应用程序中没有使用BSON,我想知道如何比较两个日期。让我举一个例子: def isTokenExpired(tokenId: String): Future[Boolean] = { var query = collection.genericQueryBuilder.query( Json.obj( "_id" -> Json.obj("$oid" -> tokenId), "expirationTi

我经常和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
无法按预期工作,因为
expireationtime
被视为
字符串
–我有一个隐式
写入
,它将
日期时间
序列化为
“yyyy-MM-ddTHH:MM:ss.SSSZ”
。。。这是正确的,因为我想要一个人类可读的JSON

也就是说,如何从日期时间小于另一个日期时间的集合中获取文档?以下内容似乎不起作用:

Json.obj(
  "_id" -> Json.obj("$oid" -> tokenId),
  "expirationTime" -> Json.obj("$lte" -> Json.obj("$date" -> DateTime.now(DateTimeZone.UTC).getMillis))
)
谢谢

我有一个隐式写入,它将日期时间序列化为“yyyy-MM-ddTHH:MM:ss.SSSZ”。。。这是正确的,因为我想要一个人类可读的JSON

如果在MongoDB中将日期时间存储为字符串,则
$lte
不会比较日期

您应该在MongoDB中将
DateTime
存储为date(使用
$date
),以便使用第二个查询(使用
$lte
$date

我想要一个可读的JSON

为什么需要人类可读的JSON?我看不出有任何反对日期数据类型的理由(如果您需要在API中使用人类可读的JSON,那么在API中转换日期字段)。 MongoDB日期是可读的。MongoDB shell中的输出:

PRIMARY> db.mycollection.findOne()
{
     "creation" : ISODate("2014-01-16T14:45:27.441Z")
}
当我说“人类可读的JSON”时,我指的是Scala API返回的JSON,而不是mongo控制台呈现的JSON——可能我不够清楚;-)