繁体   English   中英

mongo数据库日期保存为字符串,使用RoboMongo或Python的PyMongo转换为ISO日期

[英]mongo db date saved as string, convert to ISO Date using RoboMongo or Python's PyMongo

首先,我不是mongo db专家,所以我可能会有一些新手错误。 我有一个通过解析json前一段时间用pymongo创建的mongodb数据库。 示例代码是这样的:

data = {parsed_json['location']['city']:
                 'local_time': parsed_json['current_observation']['local_time_rfc822'],
                 'full_name': parsed_json['current_observation']
                                         ['observation_location']['full'],
                 'latitude': float(parsed_json['current_observation']
                                              ['observation_location']
                                              ['latitude']),
                 'longitude': float(parsed_json['current_observation']
                                               ['observation_location']
                                               ['longitude']),
                 'elevation_ft': float(parsed_json['current_observation']
                                                  ['observation_location']
                                                  ['elevation'].split(' ')[0])
                 }}
        collection = db[state_to_insert]
        collection.insert_one(data)
        print 'Inserted data successfully'

db中的输出看起来像下面的输出,但是,“ local_time”字段之一以错误的格式(字符串而不是日期)保存。

{
    "_id" : ObjectId("5adb54ff59aea50aec2856bf"),
    "Ithaca" : {
        "weather" : "Clear",
        "full_name" : "Ithaca, New York",
        "windchill_f" : 47.0,
        "solarradiation" : 786,
        "heat_index" : "NA",
        "latitude" : 44.7,
        "wind_mph" : 0.0,
        "dewpoint" : 23,
        "precip_today_in" : 0.0,
        "temp_f" : 47.0,
        "elevation_ft" : 174.0,
        "pressure_trend" : "0",
        "visibility_mi" : 10.0,
        "wind_string" : "Calm",
        "pressure_in" : 30.34,
        "wind_dir" : "NNW",
        "wind_degrees" : 336.0,
        "relative_humidity_perc" : 0.38,
        "uv" : 3.7,
        "longitude" : -73.47,
        "local_time" : "Sat, 21 Apr 2018 11:13:03 -0400",
        "wind_gust_mph" : 0.0,
        "feels_like" : 47
    }
}

我的数据库正在本地计算机上运行,​​该数据库有一个名为“ NY”的集合: 机器人mongo mongodb

为了修复数据类型,以便我可以按日期正确查询数据库,在robomongo中,我运行以下代码:

db.NY.find().forEach(function(element){
  element.local_time = new Date(element.local_time);
  db.NY.save(element);
})

产生以下输出:

{
    "_id" : ObjectId("5adb54ff59aea50aec2856bf"),
    "Ithaca" : {
        "weather" : "Clear",
        "full_name" : "Ithaca, New York",
        "windchill_f" : 47.0,
        "solarradiation" : 786,
        "heat_index" : "NA",
        "latitude" : 44.7,
        "wind_mph" : 0.0,
        "dewpoint" : 23,
        "precip_today_in" : 0.0,
        "temp_f" : 47.0,
        "elevation_ft" : 174.0,
        "pressure_trend" : "0",
        "visibility_mi" : 10.0,
        "wind_string" : "Calm",
        "pressure_in" : 30.34,
        "wind_dir" : "NNW",
        "wind_degrees" : 336.0,
        "relative_humidity_perc" : 0.38,
        "uv" : 3.7,
        "longitude" : -73.47,
        "local_time" : "Sat, 21 Apr 2018 11:13:03 -0400",
        "wind_gust_mph" : 0.0,
        "feels_like" : 47
    },
    "local_time" : ISODate("1970-01-01T00:00:00.000Z")
}

因此,该功能似乎可以在robomongo中运行,但是由于以下原因,该行为不是预期的行为:

“ local_time”:“ 2018年4月21日星期六11:13:03 -0400”

转换为:

“ local_time”:ISODate(“ 1970-01-01T00:00:00.000Z”)

此外,记录中的所有其他日期都相同。 这是什么问题 谁能指出错误在哪里?

您的forEach没有element.local_time element是文档,因此应为:

db.NY.find().forEach(function(element){
  element.local_time = new Date(element.Ithaca.local_time);
  db.NY.save(element);
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM