2
只是在练习我的MongoDB查询,而且我用一个字段数据类型打了一堵墙。MongoDB:将日期字符串(mm/dd/yyyy)转换为Unix时间戳
我目前使用Robomongo作为GUI访问生产数据库。
我的文档结构如下:
是否有MongoDB的操作或方式/方法将date
字段值转换,目前在mm/dd/yyyy
格式,以Unix时间戳,所以我们可以进行过滤操作?
只是在练习我的MongoDB查询,而且我用一个字段数据类型打了一堵墙。MongoDB:将日期字符串(mm/dd/yyyy)转换为Unix时间戳
我目前使用Robomongo作为GUI访问生产数据库。
我的文档结构如下:
是否有MongoDB的操作或方式/方法将date
字段值转换,目前在mm/dd/yyyy
格式,以Unix时间戳,所以我们可以进行过滤操作?
您可以迭代所有项目并逐一更新,转换为Date
。这里是你的日期将从mm/dd/yyyy
到ISODate
一个例子:
db.test.find().forEach(function(res){
if (typeof(res.date)=="string"){
var arr = res.date.split("/");
res.date = new Date(arr[2], arr[0] - 1, arr[1]);
db.test.save(res)
}
}
)
对于Unix时间戳(米利斯从时代),你可以调用getTime()
从Date
:
db.test.find().forEach(function(res){
if (typeof(res.date)=="string"){
var arr = res.date.split("/");
res.date = new Date(arr[2], arr[0] - 1, arr[1]).getTime();
db.test.save(res)
}
}
)
注意,这些日期将被转换转换为UTC格式,因此您可能需要在进行转换之前临时更改您的时区
如果您想优化更新性能,您还可以使用bulk update
您也可以将您的日期转换为yyyy-mm-dd
,这将保留排序(检查this post)。下面将分解你的日期字段为day
,month
和year
,设置日期字段使用新的格式,并在名为test2
新的集合写输出:
db.test.aggregate([{
$project: {
startTime: 1,
endTime: 1,
date: {
$let: {
vars: {
year: { $substr: ["$date", 6, 10] },
month: { $substr: ["$date", 0, 2] },
dayOfMonth: { $substr: ["$date", 3, 2] }
},
in : { $concat: ["$$year", "-", "$$month", "-", "$$dayOfMonth"] }
}
}
}
},{
$out :"test2"
}])
感谢@BertrandMartel。这是非常有用的,但是我期望在MongoDB中保持这一点,因为这是聚合查询的一部分。如果这一切都可能,我正在寻求避免使用Javascript,PHP等来进行转换。是否有一个使用各种MongoDB运营商来实现这一目标的流程? –
我已经更新了我的帖子一个办法,你的字符串日期格式转换为'YYYY-MM-dd'这是不是你在第一时间想要什么,但将保留排序比较'MM-DD-yyyy' –