使用Python我保存日期,MongoDB的在下面的格式,如何将mongodb中的字符串日期转换为ISODate()或DATE(),如果使用python少于30天就将其删除?
completed_time : "2017:08:20 02:30:02"
现在我想删除这是超过30天的所有条目。 我该如何实现该逻辑?
使用Python我保存日期,MongoDB的在下面的格式,如何将mongodb中的字符串日期转换为ISODate()或DATE(),如果使用python少于30天就将其删除?
completed_time : "2017:08:20 02:30:02"
现在我想删除这是超过30天的所有条目。 我该如何实现该逻辑?
你可以做到这一点更简单。这个代码比需要的要长很多,为了解释。
我首先创建一个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天前不是“现在”当我计算它,并把它的格式在你的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
您可以使用datetime
模块将日期/时间字符串转换为datetime
对象,然后将其转换为序数日(仅为单个数字),并将其与30天前的日期进行比较。
希望这会做你想要什么:
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!")
我有一个疑问:{'$ lt':boundary} =>这是计算日期小于还是“边界”中的数字之和小于?如果后者是这种情况,将来有没有机会失败? –
我不清楚你的意思。我会尝试以这种方式回答,如果这不是你想知道的,请再试一次。 “边界”的计算仅计算一次,相对于“现在”。在这个例子中'posts'包含数据库中所有*帖子。然而,'{'completed_time':{'$ lt':boundary}}'一次只考虑一个帖子*。我的意思是,每个“completed_time”或者小于(即'之前')“边界”,或者不是。如果任何给定的发布小于“边界”,则它将被删除。也许你正在考虑“现在”不是固定的事实? –