[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到数组中去。 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] - 数据的增删改操作的更多相关文章
- Elasticsearch2.4.6版本 在linux 命令行 对数据的增删改操作
一._cluster系列:查询设置集群状态 1.设置集群状态 curl -XGET 10.68.120.167:9204/_cluster/health?pretty=true pretty=true ...
- Elasticsearch6.8.6版本 在head插件中 对数据的增删改操作
一.访问ES方法:http://IP:PORT/ 一.创建索引:head插件创建索引的实例:在"索引"-"新建索引"中创建索引名称,默认了分片与副本情况: 直接 ...
- mysql常用基础操作语法(三)~~对数据的增删改操作【命令行模式】
1.插入单条数据:insert into tablename(字段名1,字段名2,...) values(值1,值2,...); 从图中可以看出,插入时不需要每个字段都有值(在没有相关的约束前提下), ...
- (数据科学学习手札126)Python中JSON结构数据的高效增删改操作
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一期文章中我们一起学习了在Python ...
- 【Axure8】利用中继器(Repeater)实现表格数据的增删改
利用Repeater实现对Table数据的增删改操作. 先拖入必需的控件:rectangle.text field.droplist.button.table.repeater.具体信息如图. 为方便 ...
- MySQL增删改操作
增删改操作 增加 看语法 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3-字段n) VALUES(值1,值2,值3-值n); #指定字段来插入数据,插入 ...
- Python教程:连接数据库,对数据进行增删改查操作
各位志同道合的同仁可以点击上方关注↑↑↑↑↑↑ 本教程致力于程序员快速掌握Python语言编程. 本文章内容是基于上次课程Python教程:操作数据库,MySql的安装详解 和python基础知识之上 ...
- Python_实现json数据的jsonPath(精简版)定位及增删改操作
基于python实现json数据的jsonPath(精简版)定位及增删改操作 by:授客 QQ:1033553122 实践环境 win7 64 Python 3.4.0 代码 #-*- encod ...
- Oracle.数据的增删改、表操作(创建,修改,删除)、数据类型
SELECT ename,dname FROM emp,dept WHERE emp.deptno=dept.deptno; SELECT dname,loc FROM dept; SELECT JO ...
随机推荐
- jQuery简单实现图片预加载
我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题呢?下面我来介绍一种在实际应用中经常会使用到的js预加载的方法. ...
- The Elements of Statistical Learning第3章导读
1. 公式(3.4)的推导. 可以直接对公式(3.3)中的$\beta_0$求导就得到$\hat{\beta}_0=\bar{y}-\beta_1\bar{x}$. 对公式(3.3)中的$\beta_ ...
- Android与JNI(二) ---- Java调用C++ 动态调用
目录: 1. 简介 2. JNI 组件的入口函数 3. 使用 registerNativeMethods 方法 4. 测试 5. JNI 帮助方法 6. 参考资料 1. 简介 Android与JNI( ...
- 隐马尔可夫模型(HMM)原理
本文主要讨论隐马尔科夫模型的三大要素,三大假设和三大问题. 1.引入 隐马尔可夫模型是一个关于时序的概率模型,它描述了一个由隐藏的马尔可夫链生成状态序列,再由状态序列生成观测序列的过程.其中,状态之间 ...
- 那些年我们一起改过的bug
ORA-01861: 文字与格式字符串不匹配 ORA-00936: 缺失表达式 ORA-01810 格式代码出现两次 ORA-01722: 无效数字 无效的列索引
- Mysql和Oracle的一些语法区别
作为一个有追求的程序猿,当然要不断的学习,巴拉巴拉巴拉...好了,贴一个网址给大家,哈哈 MySQL与Oracle 差异比较:http://www.cnblogs.com/HondaHsu/p/364 ...
- ios framework 开发 之 实战 一,合并失败了
保证public 文件目录独立 在 XCode 7 中,这一条已经自动实现了 Build Settings>Public Headers Folder Path "$(PROJECT_ ...
- UVa 10148 - Advertisement
题目大意:有一些广告牌,为了使跑步者看到固定数量的广告,设计所需租用的最少数量的广告牌. 其实就是区间选点问题:数轴上有n个区间[ai, bi],取尽量少的点,使得每一个区间都至少有一个点.首先对区间 ...
- iOS 之 Quartz2D
1. Quartz2D 之 简单介绍 2. Quartz2D 之 简单使用 3. Quartz2D 之 绘制文本
- 搜索框(SearchView)的功能与用法
SearchView是搜索框组件,它可以让用户在文本框内输入汉字,并允许通过监听器监控用户输入,当用户用户输入完成后提交搜索按钮时,也通过监听器执行实际的搜索. 使用SearchView时可以使用如下 ...