使用python我以下面的格式将日期保存到MongoDB中,
completed_time : "2017:08:20 02:30:02"
现在我要删除所有超过30天的条目。 我该如何实现这个逻辑?
答案 0 :(得分:0)
您可以使用datetime
模块将日期/时间字符串转换为datetime
对象,然后将其转换为序数日(只需一个数字),并将其与当天进行比较那是三十天前的事。
希望这会做你想要的:
import datetime
completed_time = "2017:07:20 02:30:02"
timeFormat = '%Y:%m:%d %H:%M:%S'
thisDate = datetime.datetime.strptime(completed_time, timeFormat).toordinal()
today = datetime.date.today()
thirtyDaysAgo = today.toordinal() - 30
if thisDate < thirtyDaysAgo:
print("That needs deleting!")
答案 1 :(得分:0)
你可以更简单地做到这一点。此代码比需要的时间长得多,以便解释。
我首先创建一个MongoDB记录集合,其日期大约从一个半月前开始,大约两周前结束。
>>> from pymongo import MongoClient
>>> client = MongoClient()
>>> db = client.test_database
>>> from datetime import datetime, timedelta
>>> some_dates = [datetime(2017, 7, d).strftime('%Y:%m:%d %H:%M:%S') for d in range(15,31)]+[datetime(2017, 8, d).strftime('%Y:%m:%d %H:%M:%S') for d in range(1,16)]
>>> posts = db.create_collection
>>> for some_date in some_dates:
... post = {'completed_time': some_date, 'stuff': 'more stuff'}
... post_id = posts.insert_one(post).inserted_id
...
这会计算比现在提前30天(或更早)的时间和日期&#39;当我计算它,并将它放在MongoDB数据库中的格式。
>>> boundary = (datetime.now()-timedelta(30)).strftime('%Y:%m:%d %H:%M:%S')
这将计算数据库中记录的数量,其中的日期和时间位于刚刚计算的boundary
中的值之前,供以后参考。
>>> count = 0
>>> for post in posts.find({'completed_time': {'$lt': boundary}}):
... count+=1
...
>>> count
19
这是一个行,通过boundary
的计算,可以满足您的需求。
>>> r = posts.delete_many({'completed_time': {'$lt': boundary}})
现在我们可以检查是否删除了正确的记录数。
>>> count = 0
>>> for post in posts.find({'completed_time': {'$lt': boundary}}):
... count+=1
...
>>> count
0