gpt4 book ai didi

string - DateTime 对象和 YYYY-MM-DD 字符串之间的 MongoDB 区别

转载 作者:可可西里 更新时间:2023-11-01 09:57:27 26 4
gpt4 key购买 nike

在 MongoDB 中,我只需要进行日期范围查询。但是数据集很大(9 M)并且将字符串转换为 DateTime 对象(我使用 Perl 脚本)然后将它们插入到 MongoDB 中非常耗时。如果我只是将日期存储为字符串“YYYY-MM-DD”,范围查询 gt:"2013-06-01"和 lt:"2013-08-31"不会仍然给我相同的结果,就好像它们是日期时间类型?在这种情况下它们是否相同?如果是这样,存储为 DateTime 对象的优势是什么。谢谢。

最佳答案

如果您不关心应用程序中的时区支持,那么在 MongoDB 中使用字符串进行基本查询应该可以正常工作(但如果它确实很重要,您将需要一个真正的 Date类型)。

但是,如果您以后想要进行日期数学运算或将聚合框架与您的日期字段一起使用,则该字段实际上必须是 Date 类型:

http://docs.mongodb.org/manual/reference/aggregation/#date-operators

例如,您可以在 Date 类型字段上使用 $dayOfWeek 函数。

您可能会通过在 MongoDB 中使用 $substr ( doc ) 来做一些简单的事情,比如按年分组,但是生成的代码不会那么清晰(也不太可能执行)。

虽然差别不大,但我建议一般情况下尽可能将它们存储为 Date 类型。

我在 docs 中看到对于开发人员被警告不要使用 DateTime 的 Perl 驱动程序,因为它非常慢,所以也许如果您经常使用 Perl,并且聚合框架不是大问题,您最好将它们存储为数字或字符串,并根据需要在 Perl 中转换它们。

如果空间有问题,请删除不必要的字符(例如 -):

20130613 -> 
4 bytes for length of string
8 bytes encoded as UTF-8
NULL character

那将是 13 个字符。 BSON 中的日期时间值/MongoDB 另一方面需要 8 个字节(Perl $time 函数也是如此)。

(我强烈建议您进行一些性能测试,以了解在带有 Perl 的 MongoDB 中使用 Date 类型的性能影响是否会影响您的典型工作流程。)

关于string - DateTime 对象和 YYYY-MM-DD 字符串之间的 MongoDB 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17098767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com