在Mongo中更新字段类型
更新MongoDB中字段类型的问题出现的原因是根据不同的MongoDB服务器版本和PyMongo版本,需要使用不同的方法来循环遍历游标并更新每个文档。解决方法是使用批量操作来提高效率。
从MongoDB 3.2开始,需要使用批量写操作和bulkWrite()方法来更新字段类型。以下是使用PyMongo 3.0驱动程序的查询示例:
from pymongo import UpdateOne requests = [] cursor = db.collection.find({"field.1": {"$exists": True}}, {"field": 1}) for document in cursor: requests.append(UpdateOne({'_id': document['_id']}, {'$set': {'field': document['field'][0]}})) if len(requests) == 1000: db.collection.bulk_write(requests) requests = [] if len(requests) > 0: db.collection.bulk_write(requests)
从MongoDB 2.6开始,需要使用已弃用的Bulk API。以下是查询示例的Python代码:
bulk = db.collection.initialize_unordered_bulk_op() count = 0 for doc in cursor: bulk.find({'_id': doc['_id']}).update_one({'$set': {'field': doc['field'][0]}}) count = count + 1 if count == 1000: bulk.execute() bulk = db.collection.initialize_unordered_bulk_op() if count > 0: bulk.execute()
以上是更新MongoDB中字段类型的问题的出现原因和解决方法。