#python #mongodb #pymongo
Вопрос:
У меня есть станция метро, и я запрашиваю API, чтобы получить данные. Я запрашиваю этот API каждые 15 минут с помощью crontab. Ответ представляет собой XML — файл, который я анализирую для извлечения данных. Станция предоставляет данные в этом формате:
<sensore id="2" nome="Temperatura Aria" unita="°C" tipo="6">
<misura timestamp="1630620300" data_ora="2021-09-03 00:05:00" valore="18.620"/>
<misura timestamp="1630621215" data_ora="2021-09-03 00:20:15" valore="18.850"/>
<misura timestamp="1630622130" data_ora="2021-09-03 00:35:30" valore="18.620"/>
<misura timestamp="1630623046" data_ora="2021-09-03 00:50:46" valore="18.550"/>
Если я запрошу API в 2021-09-03 00:00:00, он выдаст полученные данные…Если я запрошу через 15 минут, API выдаст только что полученные данные плюс новые данные.
Эти данные хранятся в MongoDB в коллекции.
Я определяю в своем скрипте python 3 индекса, чтобы предотвратить дублирование данных:
collection-create_index('unity', pymongo.ASCENDING, 'id_sensor', pymongo.ASCENDING, 'date_time', pymongo.ASCENDING)
но, похоже, это работает неправильно, потому что иногда возникают дубликаты данных, например:
6133b7a65a0291ae76667132, 1 Unita 1, 2, temperaturaAria, 2052, 1630778788, 04/09/2021, 20:06, 20040
6133bb2902794c201efa5852, 1 Unita 1, 2, temperaturaAria, 2052, 1630779703, 04/09/2021, 20:21, 19370
6133beadd3ad130f9273aa2f, 1 Unita 1, 2, temperaturaAria, 2052, 1630779703, 04/09/2021, 20:21, 19370
6133beadd3ad130f9273aa30, 1 Unita 1, 2, temperaturaAria, 2052, 1630780618, 04/09/2021, 20:36, 18950
6133c2317e5f2476eeb52747, 1 Unita 1, 2, temperaturaAria, 2052, 1630781629, 04/09/2021, 20:53, 18540
температура воздуха в 20:21 дублируется…
Какой-нибудь намек, чтобы предотвратить действительно дубликаты?
Комментарии:
1. Вы можете подумать о создании типа индекса как уникального .
2. Создание индекса не создает уникальных индексов.. с опцией unique=True это, кажется, работает нормально.