дата mongo db, сохраненная в виде строки, преобразовать в дату ISO с помощью RoboMongo или Python PyMongo

Во-первых, я не эксперт по mongo db, поэтому у меня могут быть ошибки новичков. У меня есть база данных mongodb, которая была создана с помощью pymongo некоторое время назад, после анализа json. Вот пример кода:

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'

Вывод в базе данных выглядит так, как показано ниже, однако одно из полей «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»: < img src = "https://i.stack.imgur.com/5pUqP.png" alt = "robo 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": "Сб, 21 апр 2018, 11:13:03 -0400"

Преобразуется в:

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

Более того, все остальные даты в записи такие же. В чем проблема? Кто-нибудь может указать, где ошибка?


person Luis Miguel    schedule 26.04.2018    source источник


Ответы (1)


В вашем forEach нет element.local_time. element вот документ, значит он должен быть:

db.NY.find().forEach(function(element){
  element.local_time = new Date(element.Ithaca.local_time);
  db.NY.save(element);
})
person Alex Blex    schedule 26.04.2018