方法1 使用$convert, MongoDB版本 >= 4,速度快。

使用pymongo示范,原生mongo语句并没有尝试。

# 假设{'age': '47'}, 转换后为{'age': 47}
import time
import pymongo start_time = time.time()
handler = pymongo.MongoClient().db_name.collections_name
handler.update_many({}, [
{'$set':
{'age':
{'$convert':
{'input': '$age', 'to': 'int'}
}
}
}
])
end_time = time.time()
print('耗时:', end_time - start_time)

方法2 逐个转换,速度慢,兼容各版本MongoDB。

使用原生mongo语句示范(在robo3T或者在命令行上输入)

# 假设{'salary': '123'}, 转换后为{'salary': 123}
db.getCollection("collection_name").find({salary: {$exists: true}}).forEach(function(obj) {
obj.salary = new NumberInt(obj.salary);
db.db_name.save(obj);
});

使用pymongo,在python层进行类型转换

import time
import pymongo start_time = time.time()
handler = pymongo.MongoClient().db_name.collection_name
for row in handler.find({}, {'salary': 1}):
salary = int(row['salary'])
handler.update_one({'_id': row['_id']}, {'$set': {'salary': salary}})
end_time = time.time()
print('耗时:', end_time - start_time)

方法3 使用插入代替更新,速度快

相当于新建一个新的collection,然后删除原本的collection。因为是insert_many,所以速度快。经过测试,db.find()和xxx_many(insert_many、update_many)速度都很快。所以有一个前提:MongoDB中批量操作比逐个操作快多了。

以下操作不但做转换操作,还做了每个salary都加上100

使用pymongo示范

import time
import pymongo start_time = time.time()
db = pymongo.MongoClient().db_name
old_collection = db.old_collection
new_collection = db.new_collection
new_people_info_list = []
for row in old_collection.find():
salary = int(row['salary'])
new_salary = salary + 100
new_people_info_list.append(row)
new_collection.insert_many(new_people_info_list)
end_time = time.time()
print('耗时:', end_time - start_time)

参考

  1. https://docs.mongodb.com/manual/reference/operator/aggregation/convert/#example
  2. https://stackoverflow.com/questions/4973095/how-to-change-the-type-of-a-field

MongoDB - String转换为Int,并更新到数据库中的更多相关文章

  1. string[]转换为int[]

    今天碰到一个问题,要把string[]转换为int[],但是又不想使用循环转换,找了好久最后找到了这种方法,特此记录下. string[] input = { "1", " ...

  2. PowerDesigner如何将设计的表更新到数据库中

    前言: 软件开发的过程中,将设计的表更新到数据库中是一件繁琐的事情,使用好工具,能够事半功倍. 环境介绍:Oracle 11g x64 前期准备: 1.PowerDesigner工具(本人是32位的) ...

  3. string[] 转换为 int[]

    string[] ke=...... int[] output = Array.ConvertAll<string, int>(ke,delegate (string s) { retur ...

  4. oracle不小心更新了数据库中的所有内容后的恢复

    开发过程中,在更新数据库中的某一条数据时,由于疏忽忘记加where判断条件了,这时更新会提示是否要更新全部数据,但是由于自己没有仔细看提示导致直接点确定并commit了,导致数据库中所有数据的相关字段 ...

  5. 一个简单的批量更新oracle 数据库中 最近的服务商名称的数据

    有一个需求是这样的,我们需要更新数据库中的数据,数据时这样的 1.大约50万以上 2. 数据中有较多的重复数据 3. 需要将表中最近的代理商的名称赋值给行中的服务商名称 4. 代理商的名称可能有多个, ...

  6. php string转换为int

    本身 var_dump : string(3) "002" 本身 is_numeric : bool(true) 本身 转换为数字 : int(2) 本身 转换为数字变量 : in ...

  7. 如何将String转换为int

    1. int i = Integer.parseInt([String]); 或 i = Integer.parseInt([String],[int radix]); Integer.parseIn ...

  8. valueof这个万能方法,将string转换为int或者int转换为string都可以

    private static String testString = "111"; int stringInt = Integer.valueOf(testString); Str ...

  9. Python 实int型和list相互转换 现把float型列表转换为int型列表 把列表中的数字由float转换为int型

    第一种方法:使用map方法 >>> list = [, ] #带有float型的列表 >>> int_list = map(int,list) #使用map转换 & ...

随机推荐

  1. ImportError: DLL load failed with error code -1073741795

    Win7,python3.6,pip安装tensorflow之后报错: >>> import tensorflow Traceback (most recent call last) ...

  2. python如何安装Jupyter notebook

    一,安装Jupyter notebook 环境:win10,python3.7 两种安装方式,这里只讲pip安装 pip install jupyter notebook 二,启动Jupyter no ...

  3. python ide 使用

    pycharm jupyter 官方文档 使用 部署到服务器 参考 配置域名(反向代理) *.conf文件 server { listen ; server_name ju.iii.top; inde ...

  4. Ubuntu在当前用户目录下安装python 包

    对于tar.gz文件: tar -zxvf setuptools-19.6.tar.gz cd setuptools-19.6.tar.gz python3 setup.py build python ...

  5. 优先队列-UVA10603

    #include<cstdio> #include<cstring> #include<queue> using namespace std; typedef st ...

  6. linux c++调试日志函数

    #ifndef MYLOG_H #define MYLOG_H #include <stdio.h> #define __DEBUG__ #ifdef __DEBUG__ #define ...

  7. C语言实现反转链表 II(指定2个节点反转)

    要求: 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m ...

  8. DVA知识集合

    react与dva 原文地址:https://github.com/dvajs/dva-knowledgemap 1.变量声明 const DELAY = 1000 let count = 0 cou ...

  9. 安装oracle11gR2

    一.通过百度云等途径下载oracle11gR2 二.安装步骤 1,解压缩文件,将两个压缩文件一起解压. 2,在setup.exe右键--属性--兼容性,勾“以管理员身份运行此程序”. 3,双击“set ...

  10. 使用vim打开文件的16进制形式,编辑和全文替换

    1.先用vim打开文件的二进制形式,如果不以二进制可能会产生转换错误. vim -b file-to-open.dat 2.用xxd把文件转换成十六进制格式 :%!xxd 现在就可以对待普通文本一样查 ...