将日期转换为MongoDB ISO日期

时间:2015-12-29 20:21:26

标签: javascript python mongodb

我的MongoDB数据库中有这种格式的日期。

{
      "_id": ObjectId("5682e899f326d45c821d8b9b"),
      "City": "Atlanta",
      "Date": "12/5/02",
      "Temp": 78.5,
}

我想将此转换为ISO日期,以便我可以在数据库中对日期进行排序。使用PyMongo或JavaScript的更新命令执行此操作的最佳方法是什么。

3 个答案:

答案 0 :(得分:1)

自从我上次使用Mongo之后,Mongo已经开始了很多,但据我所知,正如其他地方所建议的那样,你将不得不依次加载和更新每个记录。

你有两个问题。首先,您的日期格式不明确。您给出的示例日期将具有不同的值,具体取决于用于将其解析为日期的系统的区域设置。在美国它是(我认为)2002年12月5日。虽然它将在2002年5月12日解析大西洋一侧。欢乐时光。

假设您知道每个日期的意图格式,那么在节点中您可以使用moment.js将每个日期解析为固定格式,例如

let date = moment(document.Date, "D/M/YY");

然后使用

输出为ISO日期
document.Date = date.toISOString();

或者如果你是好人,并且非破坏性地做这件事

document.ISODate = date.toISOString();

虽然现在你有两个约会日期......

答案 1 :(得分:0)

您将需要迭代整个结果集,并单独更新每个文档:

var f = function(e) {
    var arr = e['Date'].split("/");

    //assuming "Date" field was formatted as "YY/MM/DD"
    var date_obj = new Date(arr[0], arr[1], arr[2]);

    db.your_collection.update({_id: e['_id']}, {$set: {date_obj: date_obj}});    
}


db.your_collection.find().forEach(f)

如果要删除旧字段,可以运行以下命令:

db.your_collection.update({}, {$unset: {Date: 1}}, {multi:true});

但是,在确定日期转换正确之前,请不要这样做。

答案 2 :(得分:-1)

我认为,您应首先检索记录并使用循环来更改所有记录。然后你应该解析数据以构造一个Date对象来转换为mongo date。

var value = "12/5/02";
var parts = value.split("/");
var dt = new Date("20"+parts[2], parseInt(parts[1])-1, parts[0]);

如果您使用的是nodejs,请同时检查this

编辑:我假设12 =天,5 =月。