Json ReactiveMongo&;播放:如何比较两个DateTime实例
我经常和MongoDB互动。。。考虑到我的应用程序中没有使用BSON,我想知道如何比较两个日期。让我举一个例子: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
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——可能我不够清楚;-)