#json #mongodb #python-requests #pymongo
#json #mongodb #python-запросы #pymongo
Вопрос:
Как удалить документы Mongodb на основе определенного условия даты, используя PyMongo, который хранит объект date в строковом формате в MongoDB?
Пример кода:
API принимает параметр даты в качестве полезной нагрузки и возвращает только такой объем данных.Поэтому перед вставкой новых документов убедитесь, что предыдущие данные не удалены, а только те, которые обрабатываются в данный момент.
import requests
import json
from pymongo import MongoClient
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
past_4_month= datetime.today() relativedelta(months=-4)
past_4_month_1st_day=past_4_month.strftime("%m/01/%Y")
url='xxx'
header={'Auth':'xyz', 'Content-Type': 'application/json'}
payload={'start_date': past_4_month_1st_day }
api_data = requests.request("POST", url, data=json.dumps(payload), headers=header).json()
client = MongoClient('mongodb://localhost:27017')
db = client[test_db][test_collection]
db.delete_many({'date':{'$gte':past_4_month_1st_day}})
db.insert_many(api_data)
client.close()
Пример вывода, сохраненный в mongodb:
{
"id": ObjectId("5f44e33ffb3be4ed19a10ed3"),
"xyz_id" : "12345",
"name" : "xyz",
"date" : "3/3/2020"
}
Например, при запуске в августе 2020 года он будет возвращать данные за последние 4 месяца, т. Е. с мая 2020 года, и всегда усекать / удалять и загружать одни и те же данные до конца августа 2020 года.
1 сентября 2020 года 1-го числа месяца предыдущей датой 4 месяца будет июнь 2020 года, поэтому не следует удалять данные за май 2020 года, но только с июня 2020 года по текущий месяц (сентябрь 2020). Это означает, что при каждом запуске обрабатываются только данные за последние 4 месяца (усечение / удаление и перезагрузка).
Однако, поскольку дата хранится в виде строки в документе MongoDB, попробовал преобразовать ее в дату из строки, используя $dateFromString , $ToDate и в Python и т.д. он по-прежнему работает не так, как ожидалось, и удаляет все документы (с мая 2020 года) из предыдущих запусков / загрузок.
Пожалуйста, предложите.
Комментарии:
1. Добавьте в свои документы другое поле, в котором дата хранится разумно (либо с использованием синтаксиса ГГГГ-ММ-ДД, либо с использованием фактической метки времени), затем используйте это поле для запросов.
2. это могло бы быть обходным путем, но я искал идеальное решение.
3. Я уверен, что можно создавать регулярные выражения, которые соответствовали бы диапазонам дат m / d / y.