它之所以有效,是因为它在两个字符串之间进行字符串比较.日期采用UTC-ISO格式的众多优点之一是:YYYY-MM-DDTHH:MM:SSZ
.当然,对于日期不建议这样做,因为字符串比较比日期时间比较慢得多,因为它们实际上是数字(浮点).
因此,组成日期bigger的部分位于左侧,并且与字符串比较很好地融合在一起.
例如:与"aaa"
<;"bbb"
一样,"2022"
<;"2023"
也是如此.这只是一个字一个字的比较.
字符串"2023-12-08T09:49:00"小于字符串"2023-12-08T10:23:38"-在每个字符串中,从左到右,它们等于0
<;1
.只是对人类来说,它看起来也像是一种有意义的日期格式.
出现问题的地方是,如果您试图比较不同时区的日期时间,那么它只会被视为一个字符串,它不会正确工作.
DateTime 2023-12-08T09:49:00+0800
>;2023-12-08T10:23:38+0100
(注意+/-之后指定的时区).但是作为字符串,它会说第一个<;第二个,因为没有从时区规范中提取meaning或实际值.
顺便说一句,当存储为字符串时,ISO格式日期的这种行为几乎出现在all programming languages次,因为这只是字符串比较.(想不出字符串的行为不是这样的.)
顺便说一句,如果您的文档将其作为real date,而不是看起来像日期的字符串,则它将具有$date
部分,并且在Mongo中始终为UTC:
{
"insert": {
"$date": "2023-12-08T09:49:00.000Z"
}
}