在mongo db 中增加、删除、修改文档有好多方法,这里简单记录一下我所知道的一些方法。

前置条件:

1、创建study数据库  use study;

2、创建persons集合,当第一次向persons集合中插入数据时,如果集合不存在会自动创建。当然也可以使用命令 db.createCollection("persons",{可以带一些参数,也可以不带})

3、db.persons.find({}) 可以查询persons集合中所有的文档。

一、增加文档

增加单个文档,使用 saveinsertOne 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文档的增删改操作的更多相关文章

  1. MongoDB文档的增删改操作

    上一篇文章中介绍了MongoDB的一些基本知识,同时看到了怎么启动一个MongoDB服务,并且通过MongoDB自带的shell工具连接到了服务器. 这一次,就通过MongoDB shell介绍一下对 ...

  2. Elasticsearch之文档的增删改查以及ik分词器

    文档的增删改查 增加文档 使用elasticsearch-head查看 修改文档 使用elasticsearch-head查看 删除文档 使用elasticsearch-head查看 查看文档的三种方 ...

  3. mongodb对数组元素及内嵌文档进行增删改查操作(转)

    from:https://my.oschina.net/132722/blog/168274 比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: &l ...

  4. MongoDB对数组元素及内嵌文档进行增删改查操作

    比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: {    "_id" : "195861",    &qu ...

  5. 分布式搜索elasticsearch 索引文档的增删改查 入门

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200/ ...

  6. Java对XML文档的增删改查

    JAVA增删改查XML文件   最近总是需要进行xml的相关操作. 不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作. 读取XML配置文件 首先我们需要通过Do ...

  7. head插件对elasticsearch 索引文档的增删改查

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口.  RESTful接口URL的格式: http://localhost:9200 ...

  8. Elasticsearch 索引文档的增删改查

    利用Elasticsearch-head可以在界面上(http://127.0.0.1:9100/)对索引进行增删改查 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演 ...

  9. Mongodb的基本操作-数据库 集合 文档的增删改查

    数据库操作: //查看有哪些数据库 > show dbs local  0.078GB mydb   0.078GB //use操作将切换到一个数据库 如果数据库存在将直接切换 如果不存在 那么 ...

随机推荐

  1. FastAPI 学习之路(一)fastapi--高性能web开发框架

    fastapi是高性能的web框架.他的主要特点是:- 快速编码- 减少人为bug- 直观- 简易- 具有交互式文档 - 高性能 - 基于API的开放标准 支持python 3.6版本. 安装 pip ...

  2. Java日期时间API系列42-----一种高效的中文日期格式化和解析方法

    中文日期(2021年09月11日 和 二〇二一年九月十一日 )在生活中经常用到,2021年09月11日很好处理直接使用模板:yyyy年MM月dd日:二〇二一年九月十一日比较不好处理,需要每个数字进行转 ...

  3. Sonarqube C# 配置资料整理

    c#配置方式: http://www.cnblogs.com/CoderAyu/p/9416376.html http://www.cnblogs.com/jingridong/p/6513884.h ...

  4. 《手把手教你》系列技巧篇(二十六)-java+ selenium自动化测试-浏览器操作(详细教程)

    1.简介 在Web自动化的操作中,我们通常需要使用一些方法来操作浏览器,今天就来学习一下.这一篇宏哥主要是介绍一下,在自动化测试的时候,我们常见的一些浏览器操作有哪些,宏哥将会一一介绍和讲解. 2.浏 ...

  5. Centos6.8阿里云linux系统下配置LAMP运行环境-mysql5.6

    1.Apache #安装apache软件 yum -y install httpd #启动httpd服务 service httpd start #设置开机启动chkconfig --list htt ...

  6. 【PHP】随机生成名字

    public function test(){ $a = "赵 钱 孙 李 周 吴 郑 王 冯 陈 楮 卫 蒋 沈 韩 杨 朱 秦 尤 许 何 吕 施 张 孔 曹 严 华 金 魏 陶 姜 戚 ...

  7. 入坑Java的自学之路

    # 入坑Java的自学之路 ## 基础知识 - 编程语言:Java python c- 基本算法- 基本网络知识 tcp/ip http/https- 基本的设计模式 ------ ## 工具方面 - ...

  8. 整理常用的 vim 命令

    vim 是一款功能强大的文本编辑器,它是Linux下常用的编辑器之一,对于熟练掌握了 vim 的人来说,用它编辑文件,方便又快捷,能极大的提高工作效率 vim 功能强大,对应的命令也非常的多,对于初学 ...

  9. YbtOJ#526-折纸游戏【二分,hash】

    正题 题目链接:https://www.ybtoj.com.cn/problem/526 题目大意 一个\(n\times m\)的网格上有字母,你每次可以沿平行坐标轴对折网格,要求对折的对应位置字母 ...

  10. 熬夜整理小白入门与提升分布式版本管理软件:Git,图文并茂(建议收藏)

    @ 目录 什么是Git SVN VS Git 什么是版本控制 安装Git 谁在操作? Git本地仓库 本地仓库构造 重点 Git常用基本操作 git add git commit git diff g ...