对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操作将切换到一个数据库 如果数据库存在将直接切换 如果不存在 那么 ...
随机推荐
- aes加解密前后端-前端
一.ajax请求前端 f12请求和响应参数效果: 1.在前端封装ajax的公共Util的js中,封装ajax请求的地方,在beforeSend方法和成功之后的回调函数success方法中: var p ...
- IDEA创建Maven项目做Java Web时无WEB-INF/classes的问题
昨天开始学习Java Web中的Servlet,学到用IntelliJ IDEA创建Java Web项目时,跟着课程上老师的步骤一步步做,却发现运行时Servlet找不到.坑爹的是,练习建项目时,一模 ...
- weblogic获取应用目录路径
一.背景说明 在项目开发过程中,本地开发用的windows+tomcat,到了生产中,就成了linux+weblogic.部署工程后,应用报错,显示获取应用目录返回为null. 在网上查阅资料,发现在 ...
- Haproxy搭建web集群
目录: 一.常见的web集群调度器 二.Haproxy应用分析 三.Haproxy调度算法原理 四.Haproxy特性 五.Haproxy搭建 Web 群集 一.常见的web集群调度器 目前常见的we ...
- JNDI注入基础
JNDI注入基础 一.简介 JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API,命名服务 ...
- 【JDK】分析 String str=““ 与 new String()
一.基础概念 为了讲清楚他们的差异,这里先介绍几个概念. 1.1 常量池 所谓常量池:顾名思义就是用来存放一些常量的.该常量是在编译期被确定,并被保存在已编译的.class文件中,其中包括了类,方法, ...
- 机器学习——K-Means算法
1 基础知识 相似度或距离 假设有 $m$ 个样本,每个样本由 $n$ 个属性的特征向量组成,样本合集 可以用矩阵 $X$ 表示 $X=[x_{ij}]_{mn}=\begin{bmatrix}x_{ ...
- 每日学习——C++习题
1.题目要求:求圆的面积,数据成员为半径r,定义为私有成员,要求用成员函数实现在键盘上输入圆半径,计算圆面积.输出圆面积三个功能,要求三个成员函数在类内声明,在类外定义 //定义类 class Cir ...
- scrum项目冲刺_day03总结
摘要:今日完成任务. 1.图像识别已完成,但是较为卡顿,仍需优化 2.语音输入正在进行 3.搜索功能正在进行 总任务: 一.appUI页面(已完成) 二.首页功能: 1.图像识别功能(基本完成) 2. ...
- P4321-随机漫游【状压dp,数学期望,高斯消元】
正题 题目链接:https://www.luogu.com.cn/problem/P4321 题目大意 给出\(n\)个点\(m\)条边的一张无向图,\(q\)次询问. 每次询问给出一个点集和一个起点 ...