我正在尝试以mm / dd / YYYY格式存储日期以实现我在mongoShell中尝试遵循的东西
dt=new Date(2012,01,01)
ISODate("2012-01-31T18:30:00Z")
这不是我想要的格式。我试图将它存储为ISODate(“2012-01-01”),这样我就可以使用介于mongoDB之间的比较差异的比较来获取我想要的数据。
答案 0 :(得分:1)
一种可能的解决方案是以下面的格式存储
{
year : 2016,
month: 1,
day: 1,
yymmdd : 20160001
}
{
year : 2015,
month: 10,
day: 20,
yymmdd : 20151020
}
yymmdd 是 年乘以10,000 月乘以100并添加日期
2016年1月1日将是2016x10000 + 0x100 +1 = 20160001
2015年11月20日将是2015x10000 + 10 * 100 + 25 = 20151025
等等
上述设计可以从0AD到9999AD进行排序
日期是一个64位整数,所以如果你使用yyyymmdd样式(如上所述)它是一个32位整数,节省你的空间并满足你的目的
答案 1 :(得分:0)
听起来您的问题是关于如何将存储在Mongo中的ISO日期转换为字符串。我相信你可以找到适当的Java语法,但是在Mongo shell中你可以这样做:
> d=new Date(2012,01,01)
ISODate("2012-02-01T05:00:00Z")
> print ( d.getFullYear()+"/"+d.getMonth()+"/"+d.getDate() )
2012/1/1
但请注意,您会将您传递给日期的号码取回,而不是反映月份的号码。要解决此问题,您可以使用d.toLocaleDateString()
> d.toLocaleDateString()
02/01/2012
这是因为JavaScript Date函数接受(并返回)基于0的月份,并且您还希望确保关注相对于UTC / GMT时区的时区。