MongoDB入门系列(二):Insert、Update、Delete、Drop
概述
本章节介绍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 本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。 《欢迎交流讨论》 |
MongoDB入门系列(二):Insert、Update、Delete、Drop的更多相关文章
- [Hive - LanguageManual] DML: Load, Insert, Update, Delete
LanguageManual DML Hive Data Manipulation Language Hive Data Manipulation Language Loading files int ...
- insert update delete 语法 以及用法
insert update delete 被称为 数据定义语句语句 也就是数据的增加 修改 删除 其中不包括查询 譬如: create database -创建数据库 alter database - ...
- mysql数据恢复 insert\update\delete 工具MyFlash
一.简介MyFlash是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具.该工具通过解析v4版本的binlog,完成回滚操作.相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易. 该 ...
- LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作
我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入( ...
- 关于MyBatis mapper的insert, update, delete返回值
这里做了比较清晰的解释: http://mybatis.github.io/mybatis-3/java-api.html SqlSession As mentioned above, the Sql ...
- PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
原文: PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...
- Maven入门系列(二)--设置中央仓库的方法
原文地址:http://www.codeweblog.com/maven入门系列-二-设置中央仓库的方法/ Maven仓库放在我的文档里好吗?当然不好,重装一次电脑,意味着一切jar都要重新下载和发布 ...
- mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干
1.mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干 2.一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性).Con ...
- mongodb入门教程二
title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...
- mybatis入门系列二之输入与输出参数
mybatis入门系列二之详解输入与输出参数 基础知识 mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...
随机推荐
- 是用Epplus生成Excel 图表
1. 前言 这是我最近项目刚要的需求,然后在网上找了半天的教材 但是很不幸,有关于Epplus的介绍真的太少了,然后经过了我的不断研究然后不断的采坑,知道现在看到Excel都想吐的时候,终于成功的 ...
- P3092 [USACO13NOV]没有找零No Change
题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 ...
- .net 分布式的未来:微服务
一.背景&问题 之前框架是一个基于SOA思想设计的分布式框架.各应用通过服务方式提供使用,服务之间通信是RPC方式调用,具体实现基于.NET的WCF通信平台.框架存在如下2个问题: 1.高并发 ...
- Ceph编译安装教程
Ceph官方版本目前支持的纠删码很有限,实验室这块希望能够整合我们自主开发的纠删码BRS(Binary Reed–Solomon encoding),所以需要编译Ceph环境.Ceph官方目前推荐的安 ...
- LogCook 一个简单实用的Android日志管理工具
众所周知,日志的管理是软件系统很重要的一部分,千万不可忽略其重要性.完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样,日志就像对系统进行分析的工具,工具便捷了,对系统分析起来就能 ...
- propertychange 不起作用
兼容性问题.将$("#systemLogSettings td[name='nMaxFileSize'] input").on("input propertychange ...
- 第七届C/C++B-方格填数 DFS
方格填数 如下的10个格子 +--+--+--+ | | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+- ...
- php结合redis实现高并发下的抢购、秒杀功能 (转载)
抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到 ...
- 程序员的自我救赎---3.1:理解Oauth2.0
<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...
- Django中多表查询思路
需求: 1.有一张文章表和一张评论表 2.两张表的关系是一对多 3.规则:若是有新评论,则将对应的文章置顶,若是有新文章则将新文章置顶. 思路: 在文章表中增加一个最后评论时间的字段.然后采用分组排序 ...