概述

本章节介绍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

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

《欢迎交流讨论》

转载于:https://www.cnblogs.com/chenmh/p/8144798.html

MongoDB入门系列(二):Insert、Update、Delete、Drop相关推荐

  1. linux mysql 事务_linux下mysql Insert update delete 事务 用户管理

    linux下mysql Insert update delete  事务 用户管理 1.INSERT插入语句格式: INSERT INTO tb_name (字段1, 字段2, ...) VALUES ...

  2. SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete)

    SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete) SQL Server 2008提供了一个增强的SQL命令Merge,用法参看MS ...

  3. 机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程

    机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程) 目录(?)[+] 一多变量的线性回归 二批处理 三特征缩放 四正规方程 五多变量非线性回归 一.多变量的线性回归 在#机 ...

  4. mybatis配置insert/update/delete同一个模板

    insert,update,delete标签只是一个模板,在操作时是以sql语句为核心的, 即在做增/删/改时,insert/update/delete便签可以通用, 但做查询时只能用 select ...

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

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

  6. C语言速看,C语言高速入门系列(二)

    C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...

  7. Quantopian 入门系列二 - 流水线 (下)

    本文含 8225 字,28 图表截屏 建议阅读 42 分钟 本贴接着上贴[Quantopian 入门系列二 - 流水线 (上)]的内容,讨论下面目录的 5- 8 节: 简介 因子 筛选器 分类器 掩码 ...

  8. Reflex WMS入门系列二十五:将叉车纳入系统进行管理

    Reflex WMS入门系列二十五:将叉车纳入系统进行管理 据笔者所知,SAP WM 模块里是不对仓库里常用的叉车等仓库管理工具进行管理的.笔者发现,Reflex WMS系统则会在很多仓库部门日常操作 ...

  9. Reflex WMS入门系列二十二:物料库存报表

    Reflex WMS入门系列二十二:物料库存报表 在Reflex WMS系统上,我们可以通过物料号查询它的HD列表,或者IPG列表.通过在其HD/IPG信息得知其库存数据.当然还可以通过如下方式直接获 ...

  10. Reflex WMS入门系列二十三:几个库存相关的报表

    Reflex WMS入门系列二十三:几个库存相关的报表 Reflex WMS系统作为一个主流的仓库管理软件系统,自然需要对仓库里的库存有多个角度的报表功能.比如常见的slow-moving, agin ...

最新文章

  1. The bean 'xxxx.FeignClientSpecification', defined in null, could not be registered. A bean with that
  2. 递归查询mysql数据库设计
  3. java list有序还是无序_牛批!2w字的Java集合框架面试题精华集(2020最新版),赶紧收藏。...
  4. ASP.NET页面对象模型:Page类介绍
  5. jaxb int convert to integer
  6. 842. Split Array into Fibonacci Sequence
  7. python第三方库全部_自动更新Python所有第三方库
  8. 【LeetCode笔记】剑指 Offer 56 . 数组中数字出现的次数(Java、位运算)
  9. 利用Azure backup备份和恢复Azure虚拟机(1)
  10. 如何去学好JS的8条小建议
  11. Leetcode每日一题:46.permutations(全排列)
  12. 简简单单认识call,apply,bind方法
  13. MT4 CRM 源码
  14. NVIDIA驱动安装(arm64平台可用)
  15. macOS Monterey 12.6.1 (21G217) 正式版 ISO、IPSW、PKG 下载
  16. github注册,使用方法
  17. 把小说放到mysql中_小说系统有必要把内容存到数据库不?
  18. 计算机二级考试应用与分值,计算机二级考试题型及分值
  19. debussy和modelsim联合仿真配置
  20. ubuntu文件夹右键没有共享选项

热门文章

  1. Python产生随机数(转)
  2. syslog-ng配置说明
  3. 个人收集的一些库、工具、技术介绍
  4. 如何监测mysql主从复制状态_如何实时检测mysql主从状态,并做邮件告警?
  5. 【Elasticsearch】将 term查询的 integer 字段改成 keyword之后, must 再改成 filter,就造成query_cache剧降
  6. 【IDEA】Warning:scala: skipping Scala files without a Scala SDK in module(s) systemimport
  7. [Spark] Yarn local-dirs are bad 导致节点处于不健康状态
  8. maven的基本命令
  9. 【Filebeat】windows下安装filebeat
  10. tomcat--because there was insufficient free space available after evicting expired cache entries