[MongoDB] - 数据的增删改操作
2015-08-26 19:48
525 查看
在前一篇中简单的介绍了一些基本操作命令,现在分别针对这些命令进行比较详细的说明:
一、数据插入
插入数据使用命令insert,insert的参数只有一个,就是要插入的文档BSON数据。MongoDB的shell客户端没有提供批量插入的api,如果需要批量插入,那么需要使用javascript脚本来插入数据。
除了使用insert可以插入数据外,使用save命令也可以插入数据,save也只有一个参数。
save和insert的区别:当遇到唯一索引key相同的情况下,save操作是进行强制更新,就是删除在重建,但是insert会报错。
二、删除文档
删除文档只有命令remove,remove有且只有一个参数,remove方法会删除匹配的所有文档。如果当需要删除集合中的所有文档数据的时候,建立直接使用drop方法。
三、更新文档
更新文档命令为update,update方法参数格式为:
默认情况下,更新操作只有当查询器查到数据后,才会更新,那么可以设置当不存在数据则插入(第三个参数为true);更新操作只更新第一个匹配的记录,可以设置第四个参数为true进行批量更新。
如果在更新器中我们不使用修改器,那么进行的是强制更新,即先删除在添加的操作(一条记录),而且如果使用第四个参数,那么必须使用修改器即:
常用修改器:
一、数据插入
插入数据使用命令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学习八--MongoDB的索引操作
- java访问mongodb的基本操作
- MongoDB基本使用
- MongoDB数据库安装及测试
- 【MongoDB】-用户权限设置详解
- 【MongoDB】-Java实现对mongodb的And、Or、In操作
- MongoDB入门
- 为什么你应该永远不要再使用MongoDB
- 【MongoDB】-MongoVUE增删改查使用说明
- MongoDB C# r 中IMongoQuery的内部实现Query的用法
- 在C#中使用官方驱动操作MongoDB
- mongoDB常用命令总结
- mongoDB在windows64上安装
- MongoDB Query 的几个方法
- Mongodb 之insert瞬时完成,测试数据---飞天博客
- mongodb常用语句
- 【转】MongoDB C# / .NET Driver 中IMongoQuery的内部实现Query的用法
- mongoDB数据库设置用户名及密码
- mongodb数据库命令操作
- MongoDB基本管理命令