在mongodb中查询字符串类型日期

在mongodb中查询字符串类型日期,mongodb,Mongodb,这是我在mongodb中的查询 db.order.find ({"ublExtensions.ublExtensions.extensionContent.Metadata .ModificationTime": "2012-02-04T01:58:27.861Z"}); 它只获取特定时区的结果。修改时间每天都在变化。我有一个要求,我需要选择的数据是更新的y'day…意思是(sql中的sysdate-1)一天的数据 我如何在mongodb中实现这一点?请注意“我

这是我在mongodb中的查询

db.order.find ({"ublExtensions.ublExtensions.extensionContent.Metadata
                .ModificationTime": "2012-02-04T01:58:27.861Z"});
它只获取特定时区的结果。修改时间每天都在变化。我有一个要求,我需要选择的数据是更新的y'day…意思是(sql中的sysdate-1)一天的数据

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


请帮助解决此问题。

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

如果您决定将其存储为字符串格式,则客户端负责筛选和处理该值,因为mongo将其视为字符串。您可以参考另一个SO问题,将字符串转换为日期对象:

广泛建议您将所有日期存储在UTC中,或者存储在可能与本地数据中心相关的一致时区中,然后在客户端上将日期值转换为正确的本地时区


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

我建议您在MongoDB上将日期存储为date或ISODate,因为这样可以简化您的工作:)

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

但是,如果您需要在MongoShell上运行查询,则可以遵循类似于中所述的策略

1) 使用今天的日期和昨天的日期创建风险值:

>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 } } )

为什么您不能只使用
$gt
查询,并且为了比较时间,您可以使用
日期。现在()
和从该日期开始的日期。现在()您可以使用以前的日期,比如如果当前日期是
“2017-05-16T02:08:48.419+05:30”
,那么您将编写查询

db.collection.find({"createdAt": { $gte : new ISODate("2017-05-15T02:08:48.419+05:30") }})

我很确定你唯一的解决方案是循环每个文档,并将日期字符串转换为日期,这样你就可以正确地测试它了。Mongo只将其视为字符串。是否有任何方法可以在更新文档时存储另一个正确的日期字段?然后,您可以简单地查询UTCIs中的所有内容mongo中是否有日期转换函数,比如我们必须在sql中使用字符和日期?我们如何使用ISODate、date()或new date()将其用作sysdate-1@jdi你能看看我在这篇文章中的回答,告诉我我是否错了。这基本上就是@Ghasfarost在他的回答中所说的,除了他的回答,他首先建议将日期存储为日期对象,而不是字符串。这个答案忽略了这样一个事实,即它们首先必须存储为日期,以便日期查询能够工作。op说将它们存储为字符串是一个他们不能放弃的约束条件。@jdi谢谢,我的错,我只是没有读完整的答案by@Ghasfarost.