对mongo文档的增删改操作
在mongo db 中增加、删除、修改文档有好多方法,这里简单记录一下我所知道的一些方法。
前置条件:
1、创建study数据库 use study;
2、创建persons集合,当第一次向persons集合中插入数据时,如果集合不存在会自动创建。当然也可以使用命令 db.createCollection("persons",{可以带一些参数,也可以不带})
3、db.persons.find({}) 可以查询persons集合中所有的文档。
一、增加文档
① 增加单个文档,使用 save 或 insertOne 或 insert 方法
db.persons.save({"userId":1});
db.persons.insertOne({"userId":2,"name":"huan"});
db.persons.insert({"userId":3,"name":"huan1993",address:["湖北","武汉"]});
注意:
1、save 方法:如果传递了_id字段,如果_id字段的值在集合中已经存在,那么就会执行更新操作。
2、insertOne方法:该方法不支持执行计划 (官网原文:insertOne() is not compatible with db.collection.explain().Use insert() instead.)。
3、insert方法,当方法参数是 {} 时,那么是单条插入。
4、insert和insertOne方法当手动指定 _id 字段的值,且值存在时,那么会报错。
② 批量增加文档,使用 insert 或 insertMany 方法。
db.persons.insert([{"userId":4},{"userId":5,"address":["北京"]}]);
db.persons.insertMany([{"userId":6,"name":"1993"},{"userId":7,"name":"19930311"}]);
注意:
1、当 insert方法中的参数是数组传递的时候就是批量插入
2、insertMany 中的文档如果指定了 _id 字段,那么这个字段的值必须要唯一。
3、insertMany 不支持执行计划
4、默认情况下如果 insertMany 中的 _id 字段重复了,那么 到第一个 _id 重复前的记录都会插入成功,之后的都会失败,即使之后的记录数不存在 _id 重复,假如我要之后的记录也要执行,那么需要设置 ordered 为 false . 即: db.persons.insertMany([],{ordered:false})
二、修改文档
① 替换文档
上方有个 userId 为 2文档,我想将将 name 的值更改成 name-update
注意:
1、如果前面的查询条件 {"userId":2} 查出了多条记录,只会更新第一条记录。
2、次方法会将后面的文档替换满足条件的第一个文档。
② 修改文档中的某个字段
注意: 1、此时也之后更新符合条件的第一条记录。
2、如果需要更新的字段在原文档中不存在则会增加此字段
③ 批量修改
方式一:
经过上面2步的操作,我们现在存在2条 {"name":"huan1993"} 的记录,现在要把2条记录的 userId 字段的值 同时修改成 10
注意:
1、在update方法中必须要将 第四个 参数 设置成 true
2、批量更新只可用在 $XXX 的修饰器中,当删除上面的$set时,更新会报错。
方式二:
上方有2个userId=10的记录,但是它们的name的值不一样,下方就更新成一样的。
④ save 方法也可以进行update操作,当 _id 的值存在时,将进行更新操作。
看上方的图可以,存在2个userId=10的记录,现在我们要将第二条记录的 userId 的值更新成 12,使用 _id 这个字段的值去更新。
⑤ 保存或更新操作
db.persons.update({"userId":13},{
$set: {
"age":25,
"name":"第一次执行,将会执行 插入操作,因此此时无法查询出来记录,第二次执行将会执行更新操作,因为此时记录已经存在了。"
}
},true,false);
db.persons.find({"userId":13});
注意:
1、此时一定要将 update 的第三个参数设置成 true, 否则当找不到记录时不会进行插入操作。第三个参数即为upsert
2、当匹配到记录时将会执行更新操作。
三、文档的删除
① 删除全部文档
db.persons.remove({});
注意:
1、 db.persons.remove({}) 只是清空了集合persons中的数据,而 db.persons.drop() 将会删除 persons集合。
② 删除根据条件查询出来的文档
db.persons.remove({"userId":13});
四、完整脚本如下:
use study;
db.persons.save({"userId":1,"_id":ObjectId("5aa3b4d2ac88ec2a80e6483c")});
db.persons.insertOne({"userId":2,"name":"huan"});
db.persons.insert({"userId":3,"name":"huan1993",address:["湖北","武汉"]});
db.persons.find();
db.persons.insert([{"userId":4},{"userId":5,"address":["北京"]}]);
db.persons.insertMany([{"userId":6,"name":"1993"},{"userId":7,"name":"19930311"}]);
db.persons.update({"userId":2 },{"name":"name-update"});
db.persons.find({"name":"name-update"})
db.persons.update({"name":"name-update"},{$set:{"userId":2,"name":"huan1993"}});
db.persons.find({"userId":2});
db.persons.find({"name":"huan1993"});
db.persons.update({"name":"huan1993"},{ $set: { "userId" : 10} },false,true);
db.persons.find({"name":"huan1993"})
db.persons.updateMany({"userId":10},{$set:{"name":"updateMany"}});
db.persons.find({"userId":10});
db.persons.save({"_id" : ObjectId("5aa3b4dbac88ec2a80e6483d"),"userId":12});
db.persons.find({"userId":12});
db.persons.update({"userId":13},{
$set: {
"age":25,
"name":"第一次执行,将会执行 插入操作,因此此时无法查询出来记录,第二次执行将会执行更新操作,因为此时记录已经存在了。"
}
},true,false);
db.persons.find({"userId":13});
db.persons.remove({});
db.persons.remove({"userId":13});
db.persons.drop();
对mongo文档的增删改操作的更多相关文章
- MongoDB文档的增删改操作
上一篇文章中介绍了MongoDB的一些基本知识,同时看到了怎么启动一个MongoDB服务,并且通过MongoDB自带的shell工具连接到了服务器. 这一次,就通过MongoDB shell介绍一下对 ...
- Elasticsearch之文档的增删改查以及ik分词器
文档的增删改查 增加文档 使用elasticsearch-head查看 修改文档 使用elasticsearch-head查看 删除文档 使用elasticsearch-head查看 查看文档的三种方 ...
- mongodb对数组元素及内嵌文档进行增删改查操作(转)
from:https://my.oschina.net/132722/blog/168274 比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: &l ...
- MongoDB对数组元素及内嵌文档进行增删改查操作
比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: { "_id" : "195861", &qu ...
- 分布式搜索elasticsearch 索引文档的增删改查 入门
1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200/ ...
- Java对XML文档的增删改查
JAVA增删改查XML文件 最近总是需要进行xml的相关操作. 不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作. 读取XML配置文件 首先我们需要通过Do ...
- head插件对elasticsearch 索引文档的增删改查
1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200 ...
- Elasticsearch 索引文档的增删改查
利用Elasticsearch-head可以在界面上(http://127.0.0.1:9100/)对索引进行增删改查 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演 ...
- Mongodb的基本操作-数据库 集合 文档的增删改查
数据库操作: //查看有哪些数据库 > show dbs local 0.078GB mydb 0.078GB //use操作将切换到一个数据库 如果数据库存在将直接切换 如果不存在 那么 ...
随机推荐
- 第06课:GDB 常用命令详解(中)
本课的核心内容: info 和 thread 命令 next.step.util.finish.return 和 jump 命令 info 和 thread 命令 在前面使用 info break 命 ...
- go中语句为什么不用加分号;结束
不用人加 编译的时候自动加了分号; 编译器工作原理 首先,在一行中,寻找成对的符号,比如一对字符串的引号.一对圆括号,一对大括号 上述任务完成后,在一行中没有其他成对的标示,然后就在行尾追加分号; 所 ...
- 并发编程之:ForkJoin
大家好,我是小黑,一个在互联网苟且偷生的农民工. 在JDK1.7中引入了一种新的Fork/Join线程池,它可以将一个大的任务拆分成多个小的任务并行执行并汇总执行结果. Fork/Join采用的是分而 ...
- 华为云计算IE面试笔记-FusionCompute虚拟机热迁移定义,应用场景,迁移要求,迁移过程
*热迁移传送了什么数据?保存在哪? 虚拟机的内存.虚拟机描述信息(配置和设备信息).虚拟机的状态 虚拟机的配置和设备信息:操作系统(类别.版本号).引导方式(VM通过硬盘.光盘.U盘.网络启动)和引导 ...
- 基于Docker构建企业Jenkins CI平台
- webpack工具学习 构建简单vue项目(不依赖vue-cli) webpack4.0
目的用webpack构建简单前端项目 1.npm init (npm init -y) 形成package.json 2.npm install --save-dev webpack 形成 n ...
- 🧚♂️全套Java教程_Java基础入门教程,零基础小白自学Java必备教程👨💻004 # 第四单元 流程控制语句上 #
一.本单元知识点概述 二.本单元目标 (Ⅰ)重点知识目标 1.if语句的格式及执行流程2.switch语句的格式及执行流程 (Ⅱ)能力目标 1.掌握if语句的格式及执行流程2.掌握switch语句的格 ...
- P3793-由乃救爷爷【分块,ST表】
正题 题目链接:https://www.luogu.com.cn/problem/P3793 题目大意 给出\(n\)个数字的一个序列\(m\)次询问区间最大值 保证数据随机 \(1\leq n,m\ ...
- Web项目自动打开并且全屏
前言 在项目当中,有些需要开机自动打开并且还要全屏.通过总结,得到以下结论:大致方法一样(IE.火狐.谷歌支持),个别的只是命令不同,以火狐浏览器为例. 浏览器全屏打开指定网页设置方法 新建浏览器快捷 ...
- 简易集成websocket技术实现消息推送
Websocket 简介 首先介绍下WebSocket,它是一种网络通信技术,该技术最大的特点就是,服务器端可以主动往客户端发送消息:当然,客户端也可以主动往服务器发送消息,实现两端的消息通信,属于网 ...