如何从MongoDB集合中的时间(HH:MM:SS.Milisecond)值大于零的日期字段中选择记录,并通过保持日期的时间(HH:MM:SS)值为零来更新记录值是否与Python脚本中的现有值相同?
当前数据如下所示-
1) "createdDate" : ISODate("2015-10-10T00:00:00Z") 2) "createdDate" : ISODate("2015-10-11T00:00:00Z") 3) "createdDate" : ISODate("2015-10-12T00:00:00Z") 4) "createdDate" : ISODate("2015-10-13T01:04:30.515Z") 5) "createdDate" : ISODate("2015-10-14T02:05:50.516Z") 6) "createdDate" : ISODate("2015-10-15T03:06:60.517Z") 7) "createdDate" : ISODate("2015-10-16T04:07:80.518Z")
如何mongodbsql在Python脚本中仅选择第4、5、6和7行,并使用时间戳将其更新为零?
mongodbsql
更新后,数据如下所示-
1) "createdDate" : ISODate("2015-10-10T00:00:00Z") 2) "createdDate" : ISODate("2015-10-11T00:00:00Z") 3) "createdDate" : ISODate("2015-10-12T00:00:00Z") 4) "createdDate" : ISODate("2015-10-13T00:00:00Z") 5) "createdDate" : ISODate("2015-10-14T00:00:00Z") 6) "createdDate" : ISODate("2015-10-15T00:00:00Z") 7) "createdDate" : ISODate("2015-10-16T00:00:00Z")
最好的方式来更新您的文件,并set在时间00:00:00使用日期时间模块,因为createdDate是一个DateTime对象在Python中,这样你就可以使用datetime实例的属性day,year和month。
set
00:00:00
createdDate
datetime
day
year
month
from datetime import datetime from pymongo import MongoClient client = MongoClient() db = client.test collection = db.collection bulkOp = collection.initialize_ordered_bulk_op() count = 0 for doc in collection.find(): year = doc['createdDate'].year month = doc['createdDate'].month day = doc['createdDate'].day new_date = datetime(year, month, day) bulkOp.find({'_id': doc['_id']}).update({'$set': {'createdDate': new_date}}) count = count + 1 if count == 125: bulkOp.execute() bulkOp = collection.initialize_ordered_bulk_op() if count % 125 != 0: bulkOp.execute()