这是我在mongodb中的查询
db.order.find ({"ublExtensions.ublExtensions.extensionContent.Metadata
.ModificationTime": "2012-02-04T01:58:27.861Z"});
仅为特定时区获取结果。 modificationTime每天都在变化。我有一个要求,我需要选择即将更新的数据...意味着(sql中的sysdate -1)一天的数据。
我如何在mongodb中实现这一目标?请注意我的日期是一个字符串类型,我有一个约束,我无法改变它。有人建议使用ISODate。
请帮助解决此问题。
答案 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"