Я импортировал в Mongodb, но не смог очистить данные в Python.Пожалуйста, смотрите ниже вопрос и сценарий.Мне нужен ответ из сценариев 1 и 2
, импортировать его в MongoDB, очистить данные в Python и обновить MongoDB очищенными данными.В частности, вы будете использовать набор данных людей, где некоторые поля дня рождения выглядят так:
{
...
"birthday": ISODate("2011-03-17T11:21:36Z"),
...
}
А другие поля дня рождения выглядят так:
{
...
"birthday": "Thursday, March 17, 2011 at 7:21:36 AM",
...
}
MongoDB изначально поддерживает тип данных Date через BSON.Этот тип данных используется в первом примере, но простая строка используется во втором примере.В этой оценке вы заполняете прилагаемую записную книжку, чтобы написать сценарий исправления, в котором все поле дня рождения документа становится датой.
Загрузите записную книжку и набор данных в каталог записной книжки.После того, как вы запустили записную книжку и обновили URI подключения в третьей ячейке, продолжайте проходить по этим ячейкам, пока не достигнете пятой ячейки, где вы импортируете набор данных.Это может занять до 10 минут в зависимости от скорости вашего интернет-соединения и вычислительной мощности вашего компьютера.
После проверки того, что все документы были успешно вставлены в ваш кластер, вынапишу запрос в 7-й ячейке, чтобы найти все документы, которые используют строку для поля дня рождения.
Чтобы проверить ваше понимание первой части этой оценки, сколькодокументы имели строковое значение для поля дня рождения (вывод ячейки 8)?
Script1
Заменить YYYY запросом на людей-Rraw Collection, которая будет возвращать курсор только с
документами, где полем дня рождения является строка
people_with_string_birthdays = YYYY
Это ответ, подтверждающий, что вы завершили лабораторную работу:
people_with_string_birthdays.count()
Script2
updates = []
# Again, we're updating several thousand documents, so this will take a little while
for person in people_with_string_birthdays:
# Pymongo converts datetime objects into BSON Dates. The dateparser.parse function
# returns a datetime object, so we can simply do the following to update the field
# properly. Replace ZZZZ with the correct update operator
updates.append(UpdateOne(
{"_id": person["_id"]},
{ZZZZ: { "birthday": dateparser.parse(person["birthday"]) } }
))
count += 1
if count == batch_size:
people_raw.bulk_write(updates)
updates = []
count = 0
if updates:
people_raw.bulk_write(updates)
count = 0
# If everything went well this should be zero
people_with_string_birthdays.count()