当前位置: 首页 > news >正文

mongodb文档字符串批量替换

【mongodb文档字符串批量替换脚本语句】

前言:

1、本方式对于数据量大的情况不适用,执行可能比较慢;

2、数据量大的情况,个人推荐代码层面解决,多线程替换更快:
(1)写实体类的方式,查询全量list(也可分批次查);
(2)遍历,多线程处理,将单个实体类转JSON字符串,替换完,再转回实体类,再save。

3、!!!重要提醒:操作前一定先备份好数据。。。

一、参考方式一:eval(不推荐)

(1)语句内容:

// 旧的链接
const oldArr = [
"WWW.XXXXX.COM"
,"www.xxxxx.com"
];// 新的链接
const newStr = "www.hahahhaha.com";// ************** 【1】 示例文档:aa_文档名称_001
db.aa_文档名称_001.find().forEach(function(e) {// 替换oldArr.forEach(function(item) {const reg = eval('/' + item + '/g');e.字段111 = JSON.parse(JSON.stringify(e.字段111).replace(reg, newStr))e.字段222 = JSON.parse(JSON.stringify(e.字段222).replace(reg, newStr))});db.aa_文档名称_001.save(e);
});

(2)eval不推荐原因(摘自百度AI智能回答):

---安全隐患‌:eval函数允许执行任意JavaScript代码,这可能导致严重的安全漏洞。如果执行的代码来自不可靠的来源,比如用户输入,攻击者可以利用这一点执行恶意代码,从而窃取数据、破坏系统或获得不受限制的访问权限‌12---性能问题‌:eval通常比其他方法慢,因为它需要解析和编译代码。在处理大量数据时,使用eval可能会导致性能下降,影响系统的响应速度和效率‌2---全局锁问题‌:在MongoDB 4.0及以后的版本中,eval命令被逐步弃用,主要是因为其全局锁机制。在运行脚本时,eval会锁定整个数据库,阻止所有其他操作,这会影响数据库的并发性能和稳定性‌23---替代方案的存在‌:MongoDB提供了其他更安全和高效的替代方案,如使用聚合框架进行复杂的数据处理,或者使用事务支持来确保数据的一致性,这些方法不需要全局锁,且性能更好‌23---MongoDB版本更新对eval的影响‌:
在MongoDB 4.2及以后的版本中,Mongo shell现在只接受db.eval命令在与4.0或更早版本的服务器一起工作时使用。这意味着在未来的版本中,eval命令可能会被完全移除‌23---综上所述,由于安全隐患、性能问题和全局锁等问题,MongoDB不推荐使用eval,并提供了更安全的替代方案来处理复杂的数据操作和确保数据一致性。
二、参考方式二:RegExp(推荐)

(1)语句内容:

const urlMap = new Map();
urlMap.set( "www.aaaaa.cn", "www.AAAAA.com");
urlMap.set( "www.bbbbbbb.com", "www.BBBBBBB.com");// 预先创建正则表达式对象(如果需要的话,这里也可以不用正则表达式,而是使用简单的字符串替换)
const regexMap = new Map();
urlMap.forEach((value, key) => {// 注意:这里我们没有转义点字符,因为假设key不会包含正则表达式特殊字符// 如果key可能包含正则表达式特殊字符,请相应地转义它们regexMap.set(key, new RegExp(key, 'g'));
});// ************************* 【1】 示例文档:myDoc1
db.myDoc1.find().forEach(function(doc) {// ****** (1)数组中的字段if (Array.isArray(doc.xxxItems)) {doc.xxxItems = doc.xxxItems.map(item => {if (item.pic && typeof item.pic === 'string') {// 遍历所有正则表达式进行替换let newPic = item.pic;regexMap.forEach((regex, key) => {newPic = newPic.replace(regex, urlMap.get(key));});item.pic = newPic;}// 如果不是字符串,直接返回原值return item;});}// ****** (2)数组 -> 数组 -> 字段if (doc.aaaItems && Array.isArray(doc.aaaItems)) {doc.aaaItems = doc.aaaItems.map(ddd => {if (ddd.shippingItems) {ddd.shippingItems = ddd.shippingItems.map(sItem => {if (sItem.pic && typeof sItem.pic === 'string') {// 遍历所有正则表达式进行替换let newPic = sItem.pic;regexMap.forEach((regex, key) => {newPic = newPic.replace(regex, urlMap.get(key));});sItem.pic = newPic;}return sItem;});}// 如果不是字符串,直接返回原值return ddd;});}// 更新文档并保存db.myDoc1.save(doc);
});// ************************* 【2】 示例文档:myDoc555
db.myDoc555.find().forEach(function(doc) {if (Array.isArray(doc.aiItems)) {doc.aiItems = doc.aiItems.map(item => {if (item.pic && typeof item.pic === 'string') {// 遍历所有正则表达式进行替换let newPic = item.pic;regexMap.forEach((regex, key) => {newPic = newPic.replace(regex, urlMap.get(key));});item.pic = newPic;}// 如果不是字符串,直接返回原值return item;});// 更新文档并保存(如果实际上有更改)db.myDoc555.save(doc);}
});// ************************* 【3】 示例文档:myDoc666
db.myDoc666.find().forEach(function(doc) {regexMap.forEach((regex, key) => {if (doc.imageUrl && typeof doc.imageUrl === 'string') {doc.imageUrl = doc.imageUrl.replace(regex, urlMap.get(key));}});// 更新文档并保存(如果实际上有更改)db.myDoc666.save(doc);
});

相关文章:

mongodb文档字符串批量替换

【mongodb文档字符串批量替换脚本语句】 前言: 1、本方式对于数据量大的情况不适用,执行可能比较慢; 2、数据量大的情况,个人推荐代码层面解决,多线程替换更快: (1)写实体类的方式…...

前端安全和解决方案

提到这个我可能想到的就是不要暴露太多的账号密码信息。一些页面的请求和操作要加上权限。 然后下面就详细的介绍前端可能遇到的安全问题以及解决方法。 首先比较常见的前端的安全性问题就是跨站脚本攻击(XSS)。跨站请求伪造(csrf&#xff…...

Tlias智能辅助学习系统-部门管理

包括查询、新增、删除、修改功能 控制层 package com.itheima.controller;import com.itheima.pojo.Dept; import com.itheima.pojo.Result; import com.itheima.service.DeptService; import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.XSlf4j; import org.spr…...

React第十节组件之间传值之context

1、Context 使用creatContext() 和 useContext() Hook 实现多层级传值 概述: 在我们想要每个层级都需要某一属性,或者祖孙之间需要传值时,我们可以使用 props 一层一层的向下传递,或者我们使用更便捷的方案,用 creatC…...

flink中barrier不对齐的原因和影响

Barrier 不对齐(Barrier Misalignment)可能导致一些性能和一致性相关的问题,但 Flink 提供了机制来确保即使在不对齐的情况下,也可以保证数据的一致性。 1. 什么是 Barrier 不对齐? Barrier 不对齐是指在分布式数据流…...

软银集团孙正义再度加码OpenAI,近屿智能专注AI人才培养

11月28日凌晨,全球最大财经CNBC报道,软银集团创始人兼CEO孙正义再次向人工智能领域的领军企业OpenAI投资了15亿美元。软银对OpenAI的投资已不是首次。就在上个月,软银已在OpenAI的上一轮融资中注入了5亿美元的资金。但他一直寻求获得OpenAI更…...

麒麟系统x86安装达梦数据库

一、安装准备前工作 操作系统:银河麒麟V10,CPU: x86_64 架构 下载地址,麒麟官网:https://www.kylinos.cn/ 数据库:dm8_20220915_x86_kylin10_64 下载地址,达梦数据库官网:https://…...

Java中的“多态“详解

多态(Polymorphism)是面向对象编程(OOP)中的一个核心概念,它允许同一个接口或方法在不同对象上具有不同的实现方式。多态性使得程序在运行时可以根据对象的实际类型来决定调用哪个方法,从而提高代码的灵活性…...

buuctf-[SUCTF 2019]EasySQL 1解题记录

把你的旗帜给我,我会告诉你这面旗帜是对的。 堆叠注入查询数据库 1; show databases; ​ 查询表名 1; show tables; 获取flag 1;set sql_modepipes_as_concat;select 1...

ASP.NET Core 入门

使用 .NET CLI 创建并运行 ASP.NET Core Web 应用。 文章目录 一、先决条件二、创建Web应用项目三、运行应用四、编辑Razor页面 一、先决条件 .NET 8.0 SDK 二、创建Web应用项目 打开命令行界面,然后输入以下命令: dotnet new webapp --output aspne…...

php反序列化1_常见php序列化的CTF考题

声明: 以下多内容来自暗月师傅我是通过他的教程来学习记录的,如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考:php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…...

题目 1013: [编程入门]Sn的公式求和

题目 1013: [编程入门]Sn的公式求和 [编程入门]Sn的公式求和 求Snaaaaaa…aa…aaa&#xff08;有n个a&#xff09;之值&#xff0c;其中a是一个数字&#xff0c;为2。 例如&#xff0c;n5时222222222222222&#xff0c;n由键盘输入。 #include<stdio.h> int A(int n)…...

算法——赎金信(leetcode383)

题目&#xff1a; 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&#…...

transformers训练(NLP)阅读理解(多项选择)

简介 在阅读理解任务中&#xff0c;有一种通过多项选择其中一个答案来训练机器的阅读理解。比如&#xff1a;给定一个或多个文档h,以及一个问题S和对应的多个答案候选&#xff0c;输出问题S的答案E&#xff0c;E是答案候选中的某一个选项。 这样的目的就是通过文档&#xff0c…...

微软企业邮箱:安全可靠的企业级邮件服务!

微软企业邮箱的设置步骤&#xff1f;如何注册使用烽火域名邮箱&#xff1f; 微软企业邮箱作为一款专为企业设计的邮件服务&#xff0c;不仅提供了高效便捷的通信工具&#xff0c;更在安全性、可靠性和功能性方面树立了行业标杆。烽火将深入探讨微软企业邮箱的多重优势。 微软…...

什么是分布式锁

定义 分布式锁是控制分布式系统或集群中不同节点对共享资源访问的一种机制。在分布式环境下&#xff0c;多个节点&#xff08;如多个服务器或多个进程&#xff09;可能会同时访问诸如数据库中的某条记录、一个共享文件或者一个全局计数器等共享资源。分布式锁的目的是确保在同一…...

【含开题报告+文档+PPT+源码】基于SpringBoot的艺术培训学校管理系统的设计与实现

开题报告 艺术培训学校管理在现代教育行业中发挥着至关重要的作用&#xff0c;旨在为学员提供及时、专业且高效的课程服务&#xff0c;同时也激励培训机构不断提升教学质量与管理水平。然而&#xff0c;传统的艺术培训学校管理模式常面临一系列挑战&#xff0c;如课程报名程序…...

【网络安全 | 漏洞挖掘】绕过SAML认证获得管理员面板访问权限

未经许可,不得转载。 文章目录 什么是SAML认证?SAML是如何工作的?SAML响应结构漏洞结果什么是SAML认证? SAML(安全断言标记语言)用于单点登录(SSO)。它是一种功能,允许用户在多个服务之间切换时无需多次登录。例如,如果你已经登录了facebook.com,就不需要再次输入凭…...

Flutter:列表分页,上拉加载下拉刷新,在GetBuilder模板使用方式

GetBuilder模板使用方式参考上一节 本篇主要代码记录如何使用上拉加载下拉刷新&#xff0c; 接口请求和商品组件的代码不包括在内 pubspec.yaml装包 cupertino_icons: ^1.0.8# 分页 上拉加载&#xff0c;下拉刷新pull_to_refresh_flutter3: 2.0.2商品列表&#xff1a;controlle…...

硬件基础22 反馈放大电路

目录 一、反馈的基本概念与分类 1、什么是反馈 2、直流反馈与交流反馈 3、正反馈与负反馈 4、串联反馈与并联反馈 5、电压反馈与电流反馈 二、负反馈四种组态 1、电压串联负反馈放大电路 2、电压并联负反馈放大电路 3、电流串联负反馈放大电路 4、电流并联负反馈放大…...

挑战用React封装100个组件【001】

项目地址 https://github.com/hismeyy/react-component-100 组件描述 组件适用于需要展示图文信息的场景&#xff0c;比如产品介绍、用户卡片或任何带有标题、描述和可选图片的内容展示 样式展示 代码展示 InfoCard.tsx import ./InfoCard.cssinterface InfoCardProps {ti…...

linux高级系统编程之进程

进程 一个正在进行的程序 并行与并发 并行:执行的程序在不同CPU上同时执行 并发:一个CPU,多个进程交替执行,因为交替速度很快,所以从宏观上来看是同时执行的,但是从围观的角度是交替执行的 单道与多道 单道程序设计:所有进程一个一个排队执行,若A阻塞,B只能等待,,即使CPU处于空…...

nextjs+nestjs+prisma写todolist全栈项目

技术栈 nextjsnestjsprisma所学知识 Nextjs组件渲染,状态,路由docker启动Mysql容器prisma操作Mysql(CRUD)允许跨域请求APITanStack Query异步状态管理fetch api服务器组件预请求数据nestjs 管道和异常处理检测id是否正整数Docker启动Mysql容器 compose.yml name: todoLis…...

基于Matlab的图像去噪算法仿真

中值滤波的仿真 本节选用中值滤波法对含有高斯噪声和椒盐噪声的图像进行去噪&#xff0c;并用Matlab软件仿真。 &#xff08;1&#xff09;给图像加入均值为0&#xff0c;方差为0.02的高斯噪声&#xff0c;分别选择33模板、55模板和77模板进行去噪 Matlab部分代码&#xff1…...

Docker pull镜像拉取失败

因为一些原因&#xff0c;很多镜像仓库拉取镜像失败&#xff0c;所以需要更换不同的镜像&#xff0c;这是2024/11/25测试可用的仓库。 标题1、 更换镜像仓库的地址&#xff0c;编辑daemon.json文件 vi /etc/docker/daemon.json标题2、然后将下面的镜像源放进去或替换掉都可以…...

fastjson不出网打法—BCEL链

前言 众所周知fastjson公开的就三条链&#xff0c;一个是TemplatesImpl链&#xff0c;但是要求太苛刻了&#xff0c;JNDI的话需要服务器出网才行&#xff0c;BCEL链就是专门应对不出网的情况。 实验环境 fastjson1.2.4 jdk8u91 dbcp 9.0.20 什么是BCEL BCEL的全名应该是…...

vue2 中使用 Ag-grid-enterprise 企业版

文章目录 问题Vue2 引入企业版不生效npm run dev 时卡住了94% after seal 卡在这里了测试打包源 git 解决方案记录 问题 我想用企业版的树状表格 Vue2 引入企业版不生效 编译引入 // vue.config.js module.exports {transpileDependencies: ["ag-grid-enterprise"…...

Redis开发03:常见的Redis命令

1.输入以下命令&#xff0c;启动redis。 sudo service redis-server start 如果你是直接安装在WSL的&#xff0c;搜索栏搜索Ubuntu或者点击左下角Windows图表找到U那一栏&#xff0c;直接打开Ubentu&#xff0c;输入账密后&#xff0c;输入“sudo service redis-server start”…...

研0找实习【学nlp】14--BERT理解

​​​​​以后做项目&#xff0c;一定要多调查&#xff0c;选用不同组合关键词多搜索&#xff01; BERT论文解读及情感分类实战_bert模型在imdb分类上的准确率已经到达了多少的水平-CSDN博客 【深度学习】-Imdb数据集情感分析之模型对比&#xff08;4&#xff09;- CNN-LSTM…...

mysql之基本常用的语法

mysql之基本常用的语法 1.增加数据2.删除数据3.更新/修改数据4.查询数据4.1.where子句4.2.order by4.3.limit与offset4.4.分组与having4.5.连接 5.创建表 1.增加数据 insert into 1.指定列插入 语法&#xff1a;insert into table_name(列名1,列名2,....,列名n) values (值1,值…...

卖鱼的亲戚要我帮忙做网站/海外广告联盟平台推广

本文地址 原文地址 分享提纲&#xff1a; 1. 下载JDK1.7 2. 配置java_home 3 .安装tomcat 4 .安装eclipse或者myeclipse 5. mysql安装 破解版下载请参考Myeclipse 10 for mac 安装过程及myeclipse 10 for mac 破解版下载 刚整的pro所以研究半天把开发环境搭建好 1 首先jdk1.7 …...

做图片素材的网站有哪些/链接生成器在线制作

安装dedecms程序时出现Safe Alert: Request Error step 2!错误&#xff0c;在这些防注入的代码中&#xff0c;一旦网页上出现“union|sleep|benchmark|load_file|outfile”之中的一个代码&#xff0c;都会出现安全警告。这些情况都是由于dede安全检测的防注入代码引起的。在安装…...

虚拟机wordpress插件/公司想建个网站怎么弄

699. 掉落的方块 - 力扣&#xff08;LeetCode&#xff09; 一、题目 在二维平面上的 x 轴上&#xff0c;放置着一些方块。 给你一个二维整数数组 positions &#xff0c;其中 positions[i] [lefti, sideLengthi] 表示&#xff1a;第 i 个方块边长为 sideLengthi &#xff0c…...

wordpress微信机器人/百度搜索关键词设置

问题&#xff1a;idea 打包时&#xff0c;要求包名和项目名称不一致 两种解决办法&#xff1a; 一&#xff0c;找到要打包的项目修改pom.xml 文件 <build><!-- 打包名称 使用配置文件名称 --><finalName>qc-web-v2</finalName> </build>二&am…...

深圳企业主页制作/南昌seo顾问

scroll view 原理//作者&#xff1a;禚来强 iphone开发q*****&#xff1a;79190809 邮箱&#xff1a;zhuolaiqianggmail.com转帖请保留demo 可以到我的博客http://blog.csdn.net/diyagoanyhacker/article/list/10在滚动过程当中,其实是在修改原点坐标当手指触摸后, scroll view…...

wordpress视频教程下载/整合营销理论

求出前缀和, 那么以第x个元素结尾的最大异或值是max(sumx^sump)(1≤p<x), 用trie加速. 后缀同理, 然后扫一遍就OK了.时间复杂度O(31N)-----------------------------------------------------------------------#include<cstdio>#include<cstring>#include<a…...