查询mongodb中的字符串类型Date

时间:2012-02-16 15:43:09

标签: mongodb

这是我在mongodb中的查询

db.order.find ({"ublExtensions.ublExtensions.extensionContent.Metadata
                .ModificationTime": "2012-02-04T01:58:27.861Z"});

仅为特定时区获取结果。 modificationTime每天都在变化。我有一个要求,我需要选择即将更新的数据...意味着(sql中的sysdate -1)一天的数据。

我如何在mongodb中实现这一目标?请注意我的日期是一个字符串类型,我有一个约束,我无法改变它。有人建议使用ISODate。

请帮助解决此问题。

3 个答案:

答案 0 :(得分:8)

Mongodb以bson格式存储日期对象,如:{$ date:1329415205151}

如果您决定以字符串格式存储它,则客户端负责过滤和处理此值,因为mongo将其视为字符串。您可以通过引用其他SO问题将字符串转换为日期对象:How do I convert a property in MongoDB from text to date type?

它被广泛推荐以UTC格式存储所有日期,或者可能与本地数据中心相关的一致时区,然后将日期值转换为客户端上的正确本地时区。

您可以存储所需的任何日期值。日期的和日期的格式是两个不同的问题。如果您的约束要求您在文档中存储基于字符串的日期格式,则建议在更新时也存储$ date对象。

答案 1 :(得分:5)

我建议您将日期作为日期或ISODate存储在MongoDB上,因为它可以减轻您的生活:)

如果不可能,那么在客户端(编程语言特定的驱动程序),您应该能够将字符串解析为适当的日期类型。

但是,如果您需要在mongo shell上运行查询,则可以遵循与Mongo Cookbook

中描述的策略类似的策略

1)使用今天的日期和昨天的日期创建一个var:

>var today = new Date();
>today
ISODate("2012-11-26T22:12:03.870Z")
>var yesterday = new Date()
>yesterday.setDate(today.getDate() - 1)
>yesterday
ISODate("2012-11-25T22:12:03.870Z")

2)形成在24小时内查找文件的查询

>db.order.find( { "ublExtensions.ublExtensions.extensionContent.Metadata.ModificationTime" : { $gte : yesterday, $lt : today } } )

答案 2 :(得分:0)

为什么你不能只使用$gt查询,并且为了比较你可以使用Date.now()Date.now()的时间,你可以使用前一个日期,就像当前日期是{{1那么你将编写查询

"2017-05-16T02:08:48.419+05:30"