我怎样才能将字符串解析为日期类型“1998/10/01”,“1998/1/01”格式YYYY / M / D,
棘手的部分是月份,这个字段可能是2位数,10~12位或1位数,1~9位。
是否可以在mongo中解析日期字符串的类型?
喜欢Date("$date_str")
答案 0 :(得分:2)
是的,使用Javascript。
假设我有以下文件
{
"_id" : ObjectId("553a6abb3614af9afd23310c"),
"foo" : "bar",
"date" : "1998/10/01"
}
请注意date
是一个字符串。我们可以在Mongo Shell中运行以下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")
}
答案 1 :(得分:1)
从这样的日期字符串格式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的forEach()
光标方法与$set
运算符进行原子更新:
db.collection.find().forEach(function(doc) {
db.collection.update(
{"_id": doc._id},
{
"$set": {
"date": new Date(doc.date)
}
}
);
});
答案 2 :(得分:0)
感谢您的回答。
我们应该{月} minus 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
}
});