[MongoDB] - 数据的增删改操作

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



一、数据插入

  插入数据使用命令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)

时间: 2024-10-13 02:33:49

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

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

利用Repeater实现对Table数据的增删改操作. 先拖入必需的控件:rectangle.text field.droplist.button.table.repeater.具体信息如图. 为方便后续操作,将几个text field和droplist分别命名为name.sex.title.email.两个button分别命名为addbutton.deletebutton. 双击repeater控件,进入编辑页面: ①将repeater内部默认的rectangle删去,替换成7个text fi

MySQL增删改操作

增删改操作 增加 看语法 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3-字段n) VALUES(值1,值2,值3-值n); #指定字段来插入数据,插入的值要和你前面的字段相匹配 语法二: INSERT INTO 表名 VALUES (值1,值2,值3-值n); #不指定字段的话,就按照默认的几个字段来插入数据 2. 指定字段插入数据 语法: INSERT INTO 表名(字段1,字段2,字段3-) VALUES (值1,值2,值3-); 3. 插

使用MyEclipse对MongoDB数据库 进行增删改查操作

前面写了一篇MongoDB的下载与安装,接下来此篇写的是MongoDB数据库在JAVA程序中的基本功能: 使用MyEclipse对MongoDB数据库进行增删改查操作 1.导入JAR包 使用了Spring3.0:此类包,可以上网查询"MongoDB相关JAR包" 2.创建一个Person实体类 源代码如下: public class Person(){ //属性 Private String id; //id Private String name; //name Private in

MongoDB文档的增删改操作

上一篇文章中介绍了MongoDB的一些基本知识,同时看到了怎么启动一个MongoDB服务,并且通过MongoDB自带的shell工具连接到了服务器. 这一次,就通过MongoDB shell介绍一下对文档的增删改操作. 增加新文档 接着上一篇文章,打开一个MongoDB shell. 通过“show dbs”可以看到所有的数据库.然后我们通过“use blog”切换到blog数据库来开始下面的演示. 使用“db”命令显示当前正在使用的数据库. 1 C:\mongodb\bin>mongo.exe

数据的增删改查(三层)

进行数据操作必然少了对数据的增删改查,用代码生成器生成的代码不是那么满意!方便在今后使用,这里就主要写“数据访问层(Dal)” 注:这里由于是用于用于测试时,临时建的数据库用于测试使用,在实际使用过程中些许改点参数就可以使用了 /// <summary> /// 是否存在该记录 /// </summary> public bool Exists(long Id) { string sql = "select count(*) Name from t_temp where

详解连接SQL Server数据库的方法,并使用Statement接口实现对数据库的增删改操作

总结一下,连接SQL Server数据库需要以下几个步骤: 1. 导入驱动Jar包:sqljdbc.jar 2. 加载并注册驱动程序 3. 设置连接路径 4. 加载并注册驱动 5. 连接数据库 6. 操作数据库 7. 关闭连接 代码如下: ******************连接数据库******************* 1 package zj6_Test; 2 import java.sql.*; 3 public class Zj6_3 { 4 /** 5 * 使用Statement接口

yii中数据的"增删改查"相关工作!(此文比较乱,需细看)

使用findByPk()根据数据表主键查询的是对象,不需要使用foreach()循环出来 但是使用findall()和find()查询的是对象类型的数组需要使用foreach()循环出来 ======================================= public function getMinLimit () { $sql = "..."; $result = yii::app()->db->createCommand($sql); $query = $r

Mybatis学习总结(二)—使用接口实现数据的增删改查

在这一篇中,让我们使用接口来实现一个用户数据的增删改查. 完成后的项目结构如下图所示: 在这里,person代表了一个用户的实体类.在该类中,描述了相关的信息,包括id.name.age.id_num信息.而personMapper则是该实体类的一个配置文件.需要注意的是,在上一篇博文中,namespace属性的值是其本身,而在这一篇中,使用的是接口.那么两者有什么区别呢?使用接口,那么相关的操作方法不用自己去实现,只需要调用该接口的相关的方法就能够实现相应的功能. 那么,在这里就有一个问题,接

Jquery easyui开启行编辑模式增删改操作

来源:http://www.cnblogs.com/nyzhai/archive/2013/05/14/3077152.html Jquery easyui开启行编辑模式增删改操作先上图 Html代码: <table id="dd"> </table> 引入JS文件和CSS样式 <script src="http://www.cnblogs.com/Resources/jquery-easyui-1.2.3/jquery-1.4.4.min.js