Mongodb 如何将字符串解析为日期类型;1998/10/01&引用;1998/1/01“;格式YYYY/M/D
如何将字符串解析为日期类型“1998/10/01”、“1998/1/01”格式YYYY/M/D 棘手的部分是在月份,这个字段可能是2位10~12或1位1~9 可以解析mongo中的日期字符串吗 像Mongodb 如何将字符串解析为日期类型;1998/10/01&引用;1998/1/01“;格式YYYY/M/D,mongodb,Mongodb,如何将字符串解析为日期类型“1998/10/01”、“1998/1/01”格式YYYY/M/D 棘手的部分是在月份,这个字段可能是2位10~12或1位1~9 可以解析mongo中的日期字符串吗 像Date(“$Date\u str”)是的,使用Javascript 假设我有以下文档 { "_id" : ObjectId("553a6abb3614af9afd23310c"), "foo" : "bar", "date" : "1998/10/01" } 请注意,date
Date(“$Date\u str”)
是的,使用Javascript
假设我有以下文档
{
"_id" : ObjectId("553a6abb3614af9afd23310c"),
"foo" : "bar",
"date" : "1998/10/01"
}
请注意,date
是一个字符串。我们可以在MongoShell中运行以下JavaScript,将其更新为日期对象
db.test.find().forEach( function(doc) {
if( typeof doc.date != 'undefined' ) { //There is a date property
var doc_date = doc.date.split("/"); //Explode on the `/`
doc.date = new Date(doc_date[0], doc_date[1], doc_date[2]); //Overwrite current value with Date Object
db.test.save(doc); //Save this document
}
});
我们的文档现在将具有Date
对象
{
"_id" : ObjectId("553a6abb3614af9afd23310c"),
"foo" : "bar",
"date" : ISODate("1998-11-01T00:00:00.000Z")
}
从这样的日期字符串格式获取日期对象非常容易
YYYY/M/D
;创建时只需将字符串作为参数传递给Date对象。这两个简单的测试证实了这一点:
var d1 = new Date("1998/10/01"),
d2 = new Date("1998/1/01");
console.log(d1); // Thu Oct 01 1998 00:00:00 GMT+0100 (GMT Daylight Time)
console.log(d2); // Thu Jan 01 1998 00:00:00 GMT+0000 (GMT Standard Time)
对于相对较小的数据集,您可以使用mongo的游标方法对运算符执行原子更新:
db.collection.find().forEach(function(doc) {
db.collection.update(
{"_id": doc._id},
{
"$set": {
"date": new Date(doc.date)
}
}
);
});
谢谢你的回答 我们应该在月日减去1,以获得正确的日期
db[collection].find().forEach( function(doc) {
if( typeof doc._id != 'undefined' ) { //There is a date property
var doc_date = doc._id.split("/"); //Explode on the `/`
doc.date = new Date(doc_date[0], doc_date[1]-1, doc_date[2]); //Overwrite current value with Date Object
doc.date = new Date(doc._id); //Overwrite current value with Date Object
db[collection].save(doc); //Save this document
}
});
此解析的目的是什么,是否要将字段数据类型从字符串转换为日期?是的,我需要将字符串类型转换为日期类型不确定是否
forEach
lazy加载数据。否则,对于非常大的结果集可能会有问题。我相信游标使用延迟加载-将搜索在使用数组元素作为日期对象参数之前,您需要执行parseInt(doc_date[I])
。一个简单得多的方法就是创建日期对象,使用日期字符串作为参数,例如vard1=newdate(“1998/10/01”);控制台日志(d1);//显示1998年10月1日星期四00:00:00 GMT+0100(GMT夏令时)
也var d2=新日期(“1998/1/01”);console.log(d2);//显示1998年1月1日星期四00:00:00 GMT+0000(GMT标准时间)