在前一篇中简单的介绍了一些基本操作命令,现在分别针对这些命令进行比较详细的说明:


一、数据插入

  插入数据使用命令insert,insert的参数只有一个,就是要插入的文档BSON数据。MongoDB的shell客户端没有提供批量插入的api,如果需要批量插入,那么需要使用javascript脚本来插入数据。

db.users.insert({name:"tom",pwd:"123",sex:"m"})                     #### 单独的插入数据
for(var i=0;i<100;i++){db.users.insert({name:"tom"+i,pwd:""+i})} #### 批量插入数据

  除了使用insert可以插入数据外,使用save命令也可以插入数据,save也只有一个参数。

db.users.save({_id:ObjectId("012345678901234567890123"),name:"lili"})

  save和insert的区别:当遇到唯一索引key相同的情况下,save操作是进行强制更新,就是删除在重建,但是insert会报错。

db.users.insert({_id:ObjectId("012345678901234567890123"),name:"lili2",pwd:"123"})  #### 会出现异常,E11000 duplicate key error index
db.users.save({_id:ObjectId("012345678901234567890123"),name:"lili2",pwd:"123"})

二、删除文档

  删除文档只有命令remove,remove有且只有一个参数,remove方法会删除匹配的所有文档。如果当需要删除集合中的所有文档数据的时候,建立直接使用drop方法。

db.users.remove({name:"lili2"})    ### 删除姓名为lili2的user

三、更新文档

  更新文档命令为update,update方法参数格式为:

db.[collectionName].update(查询器,更新器,是否插入,是否批量)

  默认情况下,更新操作只有当查询器查到数据后,才会更新,那么可以设置当不存在数据则插入(第三个参数为true);更新操作只更新第一个匹配的记录,可以设置第四个参数为true进行批量更新。

  如果在更新器中我们不使用修改器,那么进行的是强制更新,即先删除在添加的操作(一条记录),而且如果使用第四个参数,那么必须使用修改器即:

db.users.update({name:"lili"},{age:23})    #### 结果是修改的记录没有了其他的属性,只有age。
db.users.update({name:"lili"},{$set:{age:23}}) #### 正常,添加一个age

  常用修改器:

修改器名称

语法

案例

$set

{$set:{field:value[,field2:value2....]}}

db.users.update({},{$:{name:1}})

$set用来指定一个键值对,如果键存在就进行修改,如果不存在,那么进行插入。

$inc

{$inc:{field:value}}

db.users.update({},{$inc:{age:1}})

$inc只能与数字类型结合使用,作用是为指定键对应的数字类型的数值添加/或者减少操作。

$unset

{$unset:{field:1}}

db.users.update({},{$unset:{email:1}})

删除指定键

$push

{$push:{field:value}}

db.users.update({},{$push:{books:””}})

1、如果指定的键是数组,则追加value到数组中去。
2、如果指定的键不是数组,那么中断当前操作Cannot apply $push/$pushAll modifier to non-array

3、如果不存在指定键,那么新建一个指定键的数组键值对

$pushAll

{$pushAll:{field:array}}

db.users.update({},{$push:{books:[]}})

用法和push一样,插入全部数据

$addToSet

{$addToSet:{field:value}}

db.users.update({},{$addToSet:{ips:”127.0.0.1”}})

如果键不存在,则创建。如果键存在,那么判断指定的value是否在值中,如果在,那么不操作,如果不在,那么添加进入。如果指定的键不是array类型的键,那么中断报错。

$pop

{$pop:{field:value}}

db.users.update({},{$pop:{books:1}})

从指定数组中删除一个值,1表示删除最后一个值,-1表示删除第一个值。

$pull

{$pull:{field:value}}

db.users.update({},{$pull:{books””js”}})

删除一个指定值

$pullAll

{$pullAll:{field:array}}

Db.users.update({},{$pullAll:{books:[“js”,”mongo”]}})

一次删除多个值

$

数组定位器,如果数组有多个数值,但是我们只想将其中一部分数据进行修改,那么我们可能就需要使用到定位器($).

例如:当有文档{name:”YFC”,age:27,books:[{type:’JS’,name:”EXTJS4”},{type:”JS”,name:”JQUERY”},{type:”DB”,name:”MONGODB”}]}我们要把type为JS的文档增加一个相同的作者auth是UPSCAT

办法:

db.users.update({"books.type":"JS"},{$set:{"books.$.author":"uspcat"}})

$each

{$each:array}

$each将array中的元素一个一个的循环拿出,可以到$addToSet修改器配合完成,将不存在的元素添加,存在的元素不添加的功能。即$addToSetAll的功能(不存在这个修改器)。

db.users.update({},{$addToSet:{books:{$each:[{type:"java",name:"spring"},{type:"db",name:"mongodb"}]}}},false,true)

[MongoDB] - 数据的增删改操作的更多相关文章

  1. Elasticsearch2.4.6版本 在linux 命令行 对数据的增删改操作

    一._cluster系列:查询设置集群状态 1.设置集群状态 curl -XGET 10.68.120.167:9204/_cluster/health?pretty=true pretty=true ...

  2. Elasticsearch6.8.6版本 在head插件中 对数据的增删改操作

    一.访问ES方法:http://IP:PORT/ 一.创建索引:head插件创建索引的实例:在"索引"-"新建索引"中创建索引名称,默认了分片与副本情况: 直接 ...

  3. mysql常用基础操作语法(三)~~对数据的增删改操作【命令行模式】

    1.插入单条数据:insert into tablename(字段名1,字段名2,...) values(值1,值2,...); 从图中可以看出,插入时不需要每个字段都有值(在没有相关的约束前提下), ...

  4. (数据科学学习手札126)Python中JSON结构数据的高效增删改操作

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一期文章中我们一起学习了在Python ...

  5. 【Axure8】利用中继器(Repeater)实现表格数据的增删改

    利用Repeater实现对Table数据的增删改操作. 先拖入必需的控件:rectangle.text field.droplist.button.table.repeater.具体信息如图. 为方便 ...

  6. MySQL增删改操作

    增删改操作 增加 看语法 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3-字段n) VALUES(值1,值2,值3-值n); #指定字段来插入数据,插入 ...

  7. Python教程:连接数据库,对数据进行增删改查操作

    各位志同道合的同仁可以点击上方关注↑↑↑↑↑↑ 本教程致力于程序员快速掌握Python语言编程. 本文章内容是基于上次课程Python教程:操作数据库,MySql的安装详解 和python基础知识之上 ...

  8. Python_实现json数据的jsonPath(精简版)定位及增删改操作

    基于python实现json数据的jsonPath(精简版)定位及增删改操作   by:授客 QQ:1033553122 实践环境 win7 64 Python 3.4.0 代码 #-*- encod ...

  9. Oracle.数据的增删改、表操作(创建,修改,删除)、数据类型

    SELECT ename,dname FROM emp,dept WHERE emp.deptno=dept.deptno; SELECT dname,loc FROM dept; SELECT JO ...

随机推荐

  1. 10.8.5如何升级(app store 出错 请稍后重试 100)

    出现问题:苹果以前的老版本,OS X 10.8或是10.8.5在当年提示你升级,你又任性没升级的时候,拖过那阵,你再想升级,就是各种报复.进app store下载或是更新东西都是弹出app stpre ...

  2. TCP/IP 标志位 SYN ACK RST UTG PSH FIN

    三次握手:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手:接收端收到请求并且允许连接的话,就会发送一个 SYN=1,ACK=1标志的数据包给发送端,告诉它,可以 ...

  3. js实现从字符串中查找出现次数最多的字符的两种解决办法

    方法一:正则表达式匹配 var str = "adadfdfseffserfefsefseeffffftsdg"; ; var result = ""; whi ...

  4. ecshop中ajax的调用原理 1

    ecshop中ajax的调用原理   1:首先ecshop是如何定义ajax对象的. ecshop中的ajax对象是在js/transport.js文件中定义的.里面是ajax对象文件.声明了一个va ...

  5. eclipse中集成svn maven开发手册---创建提分支

    开发时,需要拉取分支进行修改等操作 右键项目,选择team->分支/标记 输入创建分支地址 注意: 1,创建分支路径时,最后一层文件名称为项目的名称 2,点击浏览按钮可能会出现无法选择,且ecl ...

  6. 利用python 实现微信公众号群发图片与文本消息功能

    在微信公众号开发中,使用api都要附加access_token内容.因此,首先需要获取access_token.如下: #获取微信access_token def get_token(): paylo ...

  7. IOS 程序图标添加数字

    +(void)setAppIconNumber:(NSInteger)num{ if ([UIParam getIOSVersion]>8.0) { UIUserNotificationSett ...

  8. checkbox、radio控件和文字不对其

    一般使用html控件的时候  单选按钮和复选框的控件和文字不对齐 给input控件加上   style="vertical-align: middle; margin-top: -2px; ...

  9. PHP新手之学习类与对象(4)

    五.范围解析操作符(::) 范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员.方法和常量,还可以用于覆盖类中的成员和方法. 当在类的外 ...

  10. 简述Android系统内存不足时候,内存回收机制

    当Android系统的内存不足时,会根据以下的内存回收规则来回收内存: 1.先回收与其他Activity或Service/Intent Receiver无关的进程(即优先回收独立的Activity) ...