千家信息网

MongoDB中数据的替换方法实现类Replace()函数功能详解

发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,近日接到一个开发需求,因业务调整,需要DBA协助,将MongoDB数据库中某集合的进行替换。例如我们需要将集合A中B字段中,有关《美好》的字符替换为 《非常美好》。个人感觉这个需求如果是在SQL Se
千家信息网最后更新 2025年11月16日MongoDB中数据的替换方法实现类Replace()函数功能详解

近日接到一个开发需求,因业务调整,需要DBA协助,将MongoDB数据库中某集合的进行替换。例如我们需要将集合A中B字段中,有关《美好》的字符替换为 《非常美好》。个人感觉这个需求如果是在SQL Server 或MySQL 数据库上处理是小菜一碟,如果是针对MongoDB数据,可能要费神了。

1.常见关系数据数据库中的替换函数

在SQL Server数据库中,我们用Replace函数来实现字符的替换。

语法

REPLACE ( ''string_replace1'' , ''string_replace2'' , ''string_replace3'' )

参数

''string_replace1''

待搜索的字符串表达式。string_replace1 可以是字符数据或二进制数据。

''string_replace2''

待查找的字符串表达式。string_replace2 可以是字符数据或二进制数据。

''string_replace3''

替换用的字符串表达式。string_replace3 可以是字符数据或二进制数据。

例如将 字符串 SQL Server 数据库 中的 SQL Server 替换为 MongoDB。

实现语句如下:

在MySQL数据库中语法类似。

2.在MongoDB中实现替换方法

很可惜,到目前为止还没有找到类似SQL Server的替换函数,那么我们怎么去实现文档中的数据替换呢?特别是集合中的文档数量比较大时。

假设现在有用户信息文档,如下。注意其中有联系地址。

{  "_id" : ObjectId("5c77e5f85f53771b74bc87e0"),  "username" : "hanmeimei",  "email" : "123456@126.com",  "tel" : 7891233,  "addresses" : {    "provice" : "山东省",    "city" : "菏泽市鄄城县曹集镇",    "stree" : "武状元街道28号"  }},/* 2 createdAt:2019/2/28 下午9:45:28*/{  "_id" : ObjectId("5c77e5f85f53771b74bc87df"),  "username" : "Lily",  "email" : "123456@126.com",  "tel" : 123455,  "addresses" : [    {      "provice" : "河南省",      "city" : "郑州市登封县李集镇",      "stree" : "少林街道28号"    }  ]},/* 3 createdAt:2019/2/28 下午9:45:28*/{  "_id" : ObjectId("5c77e5f85f53771b74bc87de"),  "username" : "Lily",  "email" : "123456@126.com",  "tel" : 123455,  "addresses" : {    "provice" : "山东省",    "city" : "菏泽市定陶县曹集镇",    "stree" : "武状元街道28号"  }},/* 4 createdAt:2019/2/28 下午9:45:28*/{  "_id" : ObjectId("5c77e5f85f53771b74bc87dd"),  "username" : "jack",  "email" : "123456@126.com",  "tel" : 123455,  "addresses" : {    "provice" : "山东省",    "city" : "菏泽市定陶县",    "stree" : "武状元街道28号"  }}

现在因为行政区域划分,将 菏泽市定陶县划为定陶县区。那么怎么进行批量修改呢? MongoDB中没有Replace。

Update,也不好写代码。

最终.......我们还是找到了一个方法。

大家是先看看执行的代码及实现的结果。

 db.user.find({'addresses.city':{'$regex': /菏泽市定陶县/ }}).forEach(   function(item) {    var tmp = String(item.addresses.city)    tmp = tmp.replace('菏泽市定陶县','菏泽市定陶县区')    if (tmp == null){      print(item.addresses.city)      }     item.addresses.city = tmp ;         db.user.save(item);  }  );

执行后,再次查看数据,结果如下:

/* 1 createdAt:2019/2/28 下午9:45:28*/{  "_id" : ObjectId("5c77e5f85f53771b74bc87e0"),  "username" : "hanmeimei",  "email" : "123456@126.com",  "tel" : 7891233,  "addresses" : {    "provice" : "山东省",    "city" : "菏泽市鄄城县曹集镇",    "stree" : "武状元街道28号"  }},/* 2 createdAt:2019/2/28 下午9:45:28*/{  "_id" : ObjectId("5c77e5f85f53771b74bc87df"),  "username" : "Lily",  "email" : "123456@126.com",  "tel" : 123455,  "addresses" : [    {      "provice" : "河南省",      "city" : "郑州市登封县李集镇",      "stree" : "少林街道28号"    }  ]},/* 3 createdAt:2019/2/28 下午9:45:28*/{  "_id" : ObjectId("5c77e5f85f53771b74bc87de"),  "username" : "Lily",  "email" : "123456@126.com",  "tel" : 123455,  "addresses" : {    "provice" : "山东省",    "city" : "菏泽市定陶县区曹集镇",    "stree" : "武状元街道28号"  }},/* 4 createdAt:2019/2/28 下午9:45:28*/{  "_id" : ObjectId("5c77e5f85f53771b74bc87dd"),  "username" : "jack",  "email" : "123456@126.com",  "tel" : 123455,  "addresses" : {    "provice" : "山东省",    "city" : "菏泽市定陶县区",    "stree" : "武状元街道28号"  }}

集合文档中addresses.city中的'菏泽市定陶县' 全部被 '菏泽市定陶县区' 替换,符合设计要求。

3.知识补充与回顾

(1)作为一个数据库,MongoDB有一个很大的优势-它使用js管理数据库,所以也能够使用js脚本进行复杂的管理。MongoDB自带JavaScript shell,可在shell中使用命令行与MongoDB进行交互。shell是一个功能完备的JavaScript解释器,可运行任意JavaScript程序。

mongodb 的shell是javascript实现的,如果直接使用js实现相应的功能则显得很直观和简便。比如我们对一些数据进行 统计计算,除了使用mapreduce和aggreate框架之外,直接使用js也是很好的选择。还有一些批处理,数据同步都可以使用js

例如将集合中所有的文档,打印出来-- db.collectionname.find().forEach(printjson)。

注意:在上面演示的MongoDB替换字符的脚本,都在mongodb shell 和 nosqlbooster 工具里面验证过,没有问题。但是相同的代码在mongodb shell中要注意格式要求,最好要符合Javascript 格式要求,否则,可能报错,如:E QUERY [thread1] SyntaxError: missing ; before statement @(shell):1:138

(2)forEach:MongoDB数据库使用游标返回find的执行结果。客户端对游标的实现通常能够对最终结果进行有效的控制。可以限制结果的数量,略过部分结果,根据任意键按任意顺序的组合对结果进行各种排序,或者是执行其他一些强大的操作。游标有一个重要的迭代函数---cursor.forEach(回调函数),允许我们自定义回调函数来逐个处理每个单元.

(3)$regex :正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式。

更多关于MongoDB中数据的替换方法实现的方法请查看下面的相关链接

数据 字符 菏泽 菏泽市 定陶 数据库 街道 字符串 结果 函数 武状元 定陶县 山东 山东省 县区 文档 表达式 方法 曹集 曹集镇 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 潮州市网络安全平台 江苏软件开发者小程序 网络安全法教学课件 新乡网络安全系统多少钱 战地6测试找不到后端服务器 天马网络技术有限公司 kass文件服务器 暨大网络安全怎么样 创意信息属于网络安全概念吗 徐汇区第三方软件开发承诺守信 网络安全mdr是什么意思 网络安全知识答题引言 南京苹果手机软件开发如何收费 北仑安卓软件开发教程 网络安全防护技能手册 珊瑚礁服务器 如何辨别网络安全 学网络安全专业可以当网警吗 临沂游戏软件开发 厦门小型软件开发公司排名 金山区软件开发服务资质三级认证 数据库综合案例 模拟银行数据库 计算机网络技术名词术语 网络安全必学课程 mcgs如何访问远程数据库 找你妹软件开发过程 江苏省信息网络安全协会官网 旅游网站 数据库设计 靖宇无线网络技术 数据库访问逗号怎么改成冒号
0