【问题标题】:Querying on Date in Mongo在 Mongo 中查询日期
【发布时间】:2013-09-20 01:17:03
【问题描述】:

我正在插入一个带有以下时间戳的 Mongo 文档:

val format = new java.text.SimpleDateFormat("yyyyMMddHHmmss")
format.format(new Date()).toLong

从 Mongo 的 shell 中该部分的外观如下:

"{Timestamp" : NumberLong("20130919161948")}"

根据一些测试,在我看来,我可以通过检查><yyyyMMddHHmmss 格式来简单地按时间戳比较两个文档。

请让我知道这个时间戳是否适用于 Mongo。我可以用它查询吗?

【问题讨论】:

  • 为什么不使用 bson 日期作为时间戳并将它们作为日期进行比较?

标签: mongodb scala casbah


【解决方案1】:

Mongo 不会将其理解为时间戳,而是数字。当您使用从年到秒的格式设置日期时,您将能够使用 > 或

但是,如果您希望 mongo 将数据视为日期,则需要使用适当的 bson 日期格式。通过让 mongo 将其视为日期,您将拥有所有可用的 Mongo 日期操作,例如提取年份、星期几等。read more

如果您使用 casbah 和 Joda,您可以通过显式调用启用序列化和反序列化:

import com.mongodb.casbah.conversions.scala._
RegisterJodaTimeConversionHelpers()

阅读更多here

【讨论】:

  • 看起来没有Scala API (bsonspec.org/#/implementation),但有一个Java。所以我需要找到正确的类型,然后将其插入到 Mongo 中?
【解决方案2】:

@Kevin,我认为你是对的。 java.util.Date 在 BSON 对象中是 supported

使用 NumberLong 表示时间戳可以进行范围查询,但是在聚合框架中使用 BSON date typedate operation 成为可能,更强大。

【讨论】:

  • 不需要使用java。在 casbah 有一个 scala one。
猜你喜欢
  • 2016-05-21
  • 2023-02-21
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
相关资源
最近更新 更多