MongoDB应用:forEach方法实际应用

ops/2024/10/9 11:25:07/

项目场景 

今日的工作中有个需求是按照条件修改MongoDB集合中某个字段的值。之前都是用kettle或者代码处理;但是对于短频、偶尔的修改,上述方式实在是浪费时间。所以研究了下如何通过写MongoDB的 shell去实现。

代码呈现

在做语法说明之前,先将已完成的代码呈现。

db.TEST.find({"NAME":"华为"}).forEach(function(doc){db.TEST.update({"_id":doc._id},{"$set":{"NAME":"小米"}},false,true)
}
)

语法提炼 

上文代码,其实挺简单的,就一个知识点:MongoDB的 forEach 方法;下面和大家分享下这个方法。

该方法的标准语法如下

<cursor>.forEach( function(resultset){...} )
  •  <cursor>

其中<cursor>表示游标,即查询结果集,对应到MongoDB数据库中就是 db.collection.find()或者  db.collection.aggregate()的查询结果集;forEach方法会对游标进行遍历。如果您之前有接触过Oracle的PLSQL中的游标,那么这个概念对您来说就更好理解了。

  • function(resultset){...}

function(resultset){...} 是对前面查询出的结果集数据的处理函数。我们可以根据实际的需求,决定该函数该如何写。其中的resultset可以自己定义写,表示的就是前面的结果集数据;如果您愿意,写个function(dog)都没关系。在花括号{}内,就是我们具体想做的操作了,可以打印(谁闲得无聊会打印呢)、删除、新增、更新等。

下面再写几个例子让大家看的更清晰一些。

打印

db.TEST.find({"NAME":"华为"}).forEach(function(doc){printjson(doc);
}
)

您前面的 db.TEST.find({"NAME":"华为"}) 查出来什么样的结果集,就打印出什么。

删除

db.TEST.find({"NAME":"华为"}).forEach(function(doc){db.TEST.remove(doc);
}
)

方法总结

今天处理的更新数据量是100万,其实还担心这个数据量会不会对数据库性能造成影响,甚至导致数据库崩溃。但和总监沟通后,总监说5000万数据量以下都可以用此方法。

我自己也思考了下,因为是利用forEach方法遍历,每次更新一行,所以可以不用担心数据库崩溃问题。但一百多万的数据量,花了大几个小时才更新完,所以此方法在效率上可能还是存在不足。


http://www.ppmy.cn/ops/14085.html

相关文章

python+django校园社交高校交友网站2x7r5.

本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中&#xff0c;方便对数据进行操作本课题基于WEB的开发平台&#xff0c;设计的基本思路是&#xff1a; 前端&#xff1a;vue.jselementui 框架&#…

spring的bean创建流程源码解析

文章目录 IOC 和 DIBeanFactoryApplicationContext实现的接口1、BeanFactory接口2、MessageSource 国际化接口3、ResourcePatternResolver&#xff0c;资源解析接口4、EnvironmentCapable接口&#xff0c;用于获取环境变量&#xff0c;配置信息5、ApplicationEventPublisher 事…

【Python】爬虫-基础入门

目录 一、什么是爬虫 二、爬虫的主要用途 三、学会爬虫需要掌握的技能 四、爬虫使用的语言 五、编写爬虫需要的库&#xff0c;以python为例 六、爬虫示例-python 示例一 示例二 示例三 一、什么是爬虫 爬虫&#xff0c;又称网络爬虫或网页爬虫&#xff0c;是一种用来自…

web前端框架设计第六课-样式绑定

web前端框架设计第六课-样式绑定 一.预习笔记 1.class属性绑定 给P标签绑定一个类样式&#xff0c;类名为active。当active取值为true时&#xff0c;表示绑定样式成功&#xff0c;取值为false时&#xff0c;取消绑定 以对象形式给P标签绑定多个类样式 以数组形式给P标签绑定多…

Java面试之四种访问权限

在Java中&#xff0c;访问权限控制是通过四种不同的访问修饰符实现的&#xff1a; &#xff08;访问权限就像是门上的锁&#xff0c;不同的修饰符代表着不同的锁类型&#xff09; 1、public&#xff1a; public是最开放的访问级别修饰符。使用public修饰的成员可以被该类所在…

go-zero整合Kafka实现消息生产和消费

go-zero整合Kafka实现消息生产和消费 本教程基于go-zero微服务入门教程&#xff0c;项目工程结构同上一个教程。 go-zero微服务入门教程&#xff08;点击进入&#xff09; 本教程主要实现go-zero框架整合单机版Kafka&#xff0c;并暴露接口实现Kafka消息的生产和消费。 本文源…

Node.JS安装及配置教程(Windows)【安装】

文章目录 一、 Node.JS 下载1. 官网下载&#xff08;1&#xff09;国内地址&#xff08;2&#xff09;国外地址 2. 其它渠道 二、 Node.JS 安装三、 Node.JS验证四、 Node.JS 配置&#xff08;可选&#xff09;1. 配置全局模块安装路径方法一方法二2. 配置国内镜像 五、 yarn 安…

CSS3新增特性(二)

四、2D 转换 • 属性名&#xff1a;transform &#xff08;可用于制作2D转换&#xff0c;也可用于制作3D转转换&#xff1b;2D转换是平面上的转换&#xff0c;3D转换是在三维立体空间的转换&#xff09; • 作用&#xff1a;对元素进行水平或垂直方向的移动、缩放、旋转、拉长…