概述

本章节介绍Insert、Update、Delete、Drop操作基本语法。

环境:

Version:3.4

insert

insert()基本语法如下:

db.collection.insert(
<document or array of documents>,
{
writeConcern: <document>,
ordered: <boolean>
}
)

1.单条插入

db.person.insert({"age":10})

2.多条插入

使用文档数组作为参数,不过注意批量插入也会存在长度的限制

db.person.insert([{"age":11},{"age":12}])

3.错误的语法:

db.person.insert({"age":11},{"age":12})

只有age:11被插入进去,由于接收的插入文档不是数组

容易误导的地方:

db.person.insert([{"age":11},{"age":12}])

db.person.insert({"name":11,"age":12})

db.person.insert({"age":11,"age":12})

第一个插入是插入两个文档,第二个插入是插入一个文档,第三个虽然也是一个文档但是由于键重复,所以只有后一个值会被插入age:12

delete

remove() 方法的基本语法格式如下所示:

db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
  • writeConcern :(可选)抛出异常的级别。

1.删除num大于100的数据

db.new.remove({"num":{$gt:100}});

2.删除new集合所有数据

db.new.remove({});

注意:针对大表清空所有数据慎重使用remove({}),会非常的慢,而且对服务器的压力也非常的大,可以选择drop操作。

3.删除num等于100的数据

db.new.remove({"num":100})

4.测试删除速度

var timeRemoves = function(){

    var start =(new Date()).getTime();

    db.new.remove({'num':{$gt:100}});

    db.new.findOne();

    var timediff= (new Date()).getTime() - start;

    print("removeTimes: "+timediff+"ms")

}

timeRemoves()

update

update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

例:

db.person.insert([{"name":"chen","age":15},{"name":"li","age":20},{"name":"zhang","age":20}]);

$ set修改符

用于修改键的值,如果键不存在就增加键

//将age=10的数据改成15,默认如果age=10的有多条记录只更新第一条

db.person.update({"name":"li"},{$set:{"age":10}})

//更新多个满足条件的值,同时如果更新的值不存在就插入更新的值,注意:这里插入的值是20不是30

db.person.update({"age":30},{$set:{"age":20}},{multi:true,upsert:true})

可以省略multi,upsert,这里不能有花括号,但是不建议这样做

db.person.update({"age":30},{$set:{"age":20}},true,true)

//值更新为数组

db.person.update({"name":"zhang"},{$set:{"age":[10,12,14]}},{upsert:true})

//修改为其它的值

db.person.update({"name":"zhang"},{$set:{"age":''}},{upsert:true})

db.person.update({"name":"zhang"},{$set:{"age":null}},{upsert:true})

$inc修改符

用于增加已有键的值,如果键不存在就创建,只能用于整形、长整型、浮点型。

//将name=zhang的记录的age键+10

db.person.update({"name":"zhang"},{$inc:{"age":10}},{upsert:true})

//将name=zhang的记录的age键-10

db.person.update({"name":"zhang"},{$inc:{"age":-10}},{upsert:true})

$unset修改符

删除键类似关系数据库的删除字段操作,要区别$set修改符的将键设空或者null值

db.person.update({"name":"zhang"},{$unset:{"age":1}})

$push修改符

如果数组已经存在,“$push”会向已有的数组末尾加入一个元素,要是没有就创建一个新的数组。注意:必须是数组才能加入新的值

db.person.update({"name":"zhang"},{$push:{"comments":{"email":"abc@qq.com","address":"beijing"}}});

//再插入一条comments

db.person.update({"name":"zhang"},{$push:{"comments":{"mark":"aaa"}}});

$each修改符

向数组中添加元素

db.axc.remove({})

db.axc.insert({"title":1,"list":[1,2,3]})

db.axc.find();

//向list数组中添加单个元素

db.axc.update({"title":1},{$push:{"list":4}})

//向list数组中添加多个元素

db.axc.update({"title":1},{$push:{"list":{$each:[6,7]}}});

db.axc.find();

$addToSet修改符

往数组集中插入元素时,如果元素存在就不插入;方法和$push一样,唯一的区别就是$push不会判断重复值,重复也可以插入。$addToSet也可以结合$each一起使用方法和$push一样可以同时往数组中插入多个元素并且如果元素存在则不插入。

db.axc.update({"title":1},{$addToSet:{"list":2}})

db.axc.update({"title":1},{$addToSet:{"list":{$each:[2,3,4]}}});

$pull修改符

匹配数组中的元素将匹配上的元素全部删除,注意只能对数组中的元素进行匹配

db.lists.insert({"title":1,"list":[1,2,3]});

db.lists.find();

//清除list数组中的元素2

db.lists.update({},{$pull:{"list":2}})

db.lists.find();

$pop修改符

从数组的末端或头删除一个元素,$pop:{"list":1}:从末尾删除一个元素;$pop:{"list":-1}:从开头删除一个元素

//向数组list中插入两个元素

db.lists.update({},{$push:{"list":{$each:[2,4]}}});

db.lists.find()

//从末尾删除元素

db.lists.update({},{$pop:{"list":1}});

//从开头删除元素

db.lists.update({},{$pop:{"list":-1}});

基于位置的数组修改方法

可以有两种方式来定位数组中的元素:

1.通过下标;数组的下标都是从0开始。

2.通过$定位操作符,

db.comment.insert({"title":1,"comments":[{"comment":"a","author":"chen","age":10},{"comment":"b","author":"wang","age":30},{"comment":"c","author":"zhang","age":40}]});

//将数组中的第一个列表的age值改成20

//方法1:

db.comment.update({},{$set:{"comments.0.age":20}});

//方法2:

db.comment.update({"comments.author":"chen"},{$set:{"comments.$.age":20}});

drop

删除test集合,注意drop后面的括号里面不需要带花括号

db.test.drop()

总结

备注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。

《欢迎交流讨论》

MongoDB入门系列(二):Insert、Update、Delete、Drop的更多相关文章

  1. [Hive - LanguageManual] DML: Load, Insert, Update, Delete

    LanguageManual DML Hive Data Manipulation Language Hive Data Manipulation Language Loading files int ...

  2. insert update delete 语法 以及用法

    insert update delete 被称为 数据定义语句语句 也就是数据的增加 修改 删除 其中不包括查询 譬如: create database -创建数据库 alter database - ...

  3. mysql数据恢复 insert\update\delete 工具MyFlash

    一.简介MyFlash是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具.该工具通过解析v4版本的binlog,完成回滚操作.相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易. 该 ...

  4. LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作

    我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入( ...

  5. 关于MyBatis mapper的insert, update, delete返回值

    这里做了比较清晰的解释: http://mybatis.github.io/mybatis-3/java-api.html SqlSession As mentioned above, the Sql ...

  6. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

  7. Maven入门系列(二)--设置中央仓库的方法

    原文地址:http://www.codeweblog.com/maven入门系列-二-设置中央仓库的方法/ Maven仓库放在我的文档里好吗?当然不好,重装一次电脑,意味着一切jar都要重新下载和发布 ...

  8. mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干

    1.mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干 2.一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性).Con ...

  9. mongodb入门教程二

    title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...

  10. mybatis入门系列二之输入与输出参数

    mybatis入门系列二之详解输入与输出参数   基础知识   mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...

随机推荐

  1. hibernate:There is a cycle in the hierarchy! 造成死循环解决办法

    下面是报的异常:在网上搜了关于:There is a cycle in the hierarchy!,才知道原来是因为死循环造成的!解决了好久,没有成功,后台不得已请教老大,老大说是因为在使用JSON ...

  2. flask 之定时任务开发

    最近开发我的接口测试平台 ,但是遇到了一个需求,需要开发定时任务,于是百度搜索,找到了这么一个叫 pFlask-APScheduler然后开始了我的第一次的学习,于是乎, 需求是这么的: 1.添加定时 ...

  3. WebApi接收复杂类型参数

    当接收实体时,该实体类不能添加Serializable属性,否则传来的json数据无法映射成功?

  4. Failed to load the JNI shared lib...

    启动eclipse报错:Failed to load the JNI shared lib... 解决办法如下:保证JDK与eclipse相匹配 在同一台计算机中,如果JDK是32位的,那么eclip ...

  5. log4net使用注意事项

    1配置Log4net Log4net的配置文件有几种使用方式,这里将配置log4net的部分独立出来,即关于log4net的配置独立成文件log4net.config. 1)写入Mysql log4n ...

  6. 初识分布式计算:从MapReduce到Yarn&Fuxi

      这些年,云计算.大数据的发展如火如荼,从早期的以MapReduce为代表的基于文件系统的离线数据计算,到以Spark为代表的内存计算,以及以Storm为代表的实时计算,还有图计算等等.只要数据规模 ...

  7. 51Nod 1293 球与切换器 DP分类

    基准时间限制:1 秒 空间限制:131072 KB   有N行M列的正方形盒子.每个盒子有三种状态0, -1, +1.球从盒子上边或左边进入盒子,从下边或右边离开盒子.规则: 如果盒子的模式是-1,则 ...

  8. Gitlab一键端的安装汉化及问题解决(2017/12/14目前版本为10.2.4)

    Gitlab的安装汉化及问题解决 一.前言 Gitlab需要安装的包太TM多了,源码安装能愁死个人,一直出错,后来发现几行命令就装的真是遇到的新大陆一样... ... 装完之后感觉太简单,加了汉化补丁 ...

  9. 适合Linux新手的发行版有哪些?

    一个很古老的问题,找到适合的 Linux 发行版比简单的指出哪种 Linux 版本受欢迎更重要.为什么这么说?让我们设置一个情景:你有一位用户,很有可能,他过去大多数时候都是在 Windows 或者 ...

  10. eclipse中将项目打包成jar的两种方法,及其问题与解决方法

    第一种:利用eclipse中自带的export功能 第一种方法分两种情况先来看第一种情况:没有引用外部jar的项目打包 步骤一:右键点击项目选择导出(export),选择java>jar文件(不 ...