查询mongodb中的字符串类型Date

use*_*124 3 mongodb

这是我在mongodb中的查询

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

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

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

请帮助解决此问题.

jdi*_*jdi 8

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

如果您决定以字符串格式存储它,则客户端负责过滤和处理此值,因为mongo将其视为字符串.您可以通过引用另一个SO问题将您的字符串转换为日期对象:如何将MongoDB中的属性从文本转换为日期类型?

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

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


Gha*_*ost 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")
Run Code Online (Sandbox Code Playgroud)

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

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