第二部分 Mongodb增删改查
学习内容:
1.mongodb增加操作
2.mongodb删除操作
3.mongodb查询操作
增删改查的高级应用
Capped Collection(固定集合)
GridFS 大文件上传或下载
1: insert
MongoDB是面向文档存储的数据库,文档结构形式叫BSON(类似JSON)
db.c1.insert({name:"user1"});
db.c1.save({_id:1, name:"user1"}); //save()如果已经存在就不会插入,如果不存在就插入
//这里要与id相同的值才不会被插入
//save就是id相同就更新,没有相同id就插入
删除
db.c1.remove();
db.c1.remove({name:"user1"});
db.c1.find({name:"user1"},{name:1, age:1, _id:0});
条件表达式
< <= > >= !=
$gt: 大于
$lt: 小于
$gte: 大于等于
$lte: 小于等于
$ne: 不等于
统计:
db.c1.count();
db.c1.find().count();
//count(1); 里面有一个条件,如果为1,那么会取条件,如果为0不会理会条件语句
排序:
db.c1.find().sort(age:1); //1是升序 0是降序
取多少个
db.c1.find().limit(4);
跳过几个
db.c1.skip(1);
db.c1.skip(0).limit(10).sort({age:-1});
$all
操作类似于$in操作,但是不同的是,$all操作要求数组里面的值全部是包含在返回的记录里面
db.c2.find({post:{$all:[1,2,3]}});
$exists
操作检查一个字段是否存在
db.c2.find({age:{$exists:1}}); 测试一个字段是否存在
$mod
操作可以让我们简单的进行取模操作,而不需要用到where子句
//这里的是字段值的取余操作
db.c1.find({age:{$mod:[2]}});
$in 操作类似于传统关系数据库中的IN
db.c1.find({age:{$in:[1,2,3]}})
$nin 与$in相反
db.c1.find({age:{$nin:[2,3,4]}});
$or 查看指定多个条件的记录,跟sql的or差不多
db.c1.find({$or:[{name:"user1"},{name:"user2"},{age:10}]});
$nor 与$or相反过滤指定的条件
db.c1.find({$nor:[{name:"user1"},{name:"user2"},{age:10}]});
学习内容:
1.mongodb增加操作
2.mongodb删除操作
3.mongodb查询操作
增删改查的高级应用
Capped Collection(固定集合)
GridFS 大文件上传或下载
1: insert
MongoDB是面向文档存储的数据库,文档结构形式叫BSON(类似JSON)
db.c1.insert({name:"user1"});
db.c1.save({_id:1, name:"user1"}); //save()如果已经存在就不会插入,如果不存在就插入
//这里要与id相同的值才不会被插入
//save就是id相同就更新,没有相同id就插入
删除
db.c1.remove();
db.c1.remove({name:"user1"});
db.c1.find({name:"user1"},{name:1, age:1, _id:0});
条件表达式
< <= > >= !=
$gt: 大于
$lt: 小于
$gte: 大于等于
$lte: 小于等于
$ne: 不等于
统计:
db.c1.count();
db.c1.find().count();
//count(1); 里面有一个条件,如果为1,那么会取条件,如果为0不会理会条件语句
排序:
db.c1.find().sort(age:1); //1是升序 0是降序
取多少个
db.c1.find().limit(4);
跳过几个
db.c1.skip(1);
db.c1.skip(0).limit(10).sort({age:-1});
$all
操作类似于$in操作,但是不同的是,$all操作要求数组里面的值全部是包含在返回的记录里面
db.c2.find({post:{$all:[1,2,3]}});
$exists
操作检查一个字段是否存在
db.c2.find({age:{$exists:1}}); 测试一个字段是否存在
$mod
操作可以让我们简单的进行取模操作,而不需要用到where子句
//这里的是字段值的取余操作
db.c1.find({age:{$mod:[2]}});
$in 操作类似于传统关系数据库中的IN
db.c1.find({age:{$in:[1,2,3]}})
$nin 与$in相反
db.c1.find({age:{$nin:[2,3,4]}});
$or 查看指定多个条件的记录,跟sql的or差不多
db.c1.find({$or:[{name:"user1"},{name:"user2"},{age:10}]});
$nor 与$or相反过滤指定的条件
db.c1.find({$nor:[{name:"user1"},{name:"user2"},{age:10}]});
$size
操作将会查询数组长度等于输入参数的数组
$elemMatch 元素配置的意思
slaveOk
当我们在replica set进行检索操作时,默认的路由会选择master机器,当我们需要针对任意的从机进行查询的时候,我们需要开启slaveOk选项。当我们在没有开启salveOk选项的时候,如果进行此操作会报如下错: *** not master and slaveok=false
所以我们要进行如下操作: rs.slaveOk(); // enable querying a secondary db.users.find(...)
11) Cursors游标及Cursor Methods
遍历游标
var x = db.c1.find();
x.next();
x.hasNext();
while(x.hasNext() == true){
x.next();
}
NULL查询(有一个值是为null,或者一个值不存在)
db.c4.find({age:null}); //列出所有为null或者不存在的值
db.c4.find({age:{$type:10}}); //列出所有为null的数据
第二种写法
db.c4.find({age:{$exists:1, $in:[null]}});
//两个条件,一个是exists必须存在,二是为null的数据
$slice
4. Update
1) 语法 db.collection.update( criteria, objNew, upsert, multi )
参数说明: Criteria:用于设置查询条件的对象 Objnew:用于设置更新内容的对象 Upsert:如果记录已经存在,更新它,否则新增一个记录 Multi:如果有多个符合条件的记录,全部更新 注意:默认情况下,只会更新第一个符合条件的记录
$set //修改字段
db.c5.update({name:"user1"},{$set:{age:10}},0,1);
$inc //对字段进行加 a = a+1
db.c5.update({},{$inc:{age:-10}},0,1);
$unset //删除一个字段
db.c5.update({},{$unset:{age:1}});
$push
db.c5.update({},{$push:{arr:1}}); //压入一个值进入数组
$pushAll
db.c5.update({}, {$pushAll:{arr:[2,3,4]}}); //压入多个值进入数组
$pop
db.c5.update({}, {$pop:{arr:1}}); //弹出数组中的最后一个元素
db.c5.update({}, {$pop:{arr:1}}); //弹出数组中的第一个元素
$addToSet
语句: {$addToSet: {field: value}}
如果filed是一个已经存在的数组,并且value值不在其中,那么value加入到数组中
filed不存在,那么把value当成一个数组存储到filed中
filed是一个已经存在的非数组类型,那么将会报错
扩展肜户
{$addToSet:{a:{$each:[1,2,3,4,5,6]}}};
$pull
语法:{$pull:{field:_value}}
功能: 如果field是一个数组,那么删除符合_value检索条件的记录
如果field是一个已经存在的非数组,那么会报错
$pullAll
语法: {$pullAll:{field:value_array}}
功能: 同$pull类似,只是value的数据类型是一个数组
$rename
语法:{$rename:{old_field_name: new_field_name}}
功能:重命名指定的字段名称
特殊操作符:$
$操作符代码查询记录中第一个匹配条件的记录项
$db.c5.update({"arr.title":"linx"}, {$set:{arr.$.title:"I lover linx"}});
注意: 在数组中用$配合$unset操作符的时候,效果不是删除的元素,而是把匹配的元素变成null
$db.c5.update({"arr.title":"php"},{$unset:{arr.$:1}});
var x = db.c1.findOne({"user":"user1"});
x.age = 40;
x.nickname="xlc";
db.c1.save(x);
性能监控
通过对数据库的性能监控,能够更好的了解数据库的工作状态,从页进行优化
介绍几个性能监控的工具
Mongofniff
此工具可以从底层监控到底有那些命讼发送给MongoDB去执行
./mongosniff --soruce NET lo
它是实时动态监视的,需要打开中一个客户端进行命讼操作,可以将这些数据输出到一个日志文件中,那么就可以保留下所有数据库操作的历史记录,对于后期的性能分析和安全审计工作将是一个巨大的贡献
第二部分 Mongodb增删改查的更多相关文章
- 数据库——MongoDB增删改查
MongoDB增删改查操作 本文包含对数据库.集合以及文档的基本增删改查操作 数据库操作 #1.增 use config #如果数据库不存在,则创建并切换到该数据库,存在则直接切换到指定数据库. #2 ...
- MongoDB - 增删改查及聚合操作
目录 MongoDB - 增删改查及聚合操作 一. 数据库操作(database) 1. 创建及查看库 2. 删除库 二. 集合collectionc=操作(相当于SQL数据库中的表table) 1. ...
- springMVC操作mongoDB增删改查
下面是mongoDb简单的增删改查(新闻类) 附:query.addCriteria(Criteria.where("modelId").ne("").ne(n ...
- [MongoDB]增删改查
摘要 上篇文章学习了mongodb在windows上的安装,以及如何开启mongodb,最后列举了简单的增删改查操作.本篇将继续深入学习一下增删改查. 相关文章 [MongoDB]入门操作 CRUD ...
- MongoDB(六)java操作mongodb增删改查
java操作mysql数据库的代码我们已经了如指掌了.增删改查,java对mongodb数据库也是类似的操作,先是数据库连接.再是进行操作. 首先我们进入进入admin数据库.然后建立自己的数据库te ...
- MongoDB增删改查表文档
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,是一个基于分布式文件存储的开源数据库系统.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关 ...
- mongodb增删改查操作
Note:mongodb存储的是文档,且文档是json格式的对象,所以增删改查都必须是json格式对象. 注:mongodb常用库和表操作,但mongodb在插入数据时,不需要先创建表. show d ...
- mongodb增删改查常用命令总结
前言 去年我还折腾过mongodb,后来用不到也就没碰了,这就导致了我忘的一干二净,不得不感叹,编程这东西只要不用,就会忘没了.现在我想重拾mongodb,来总结一下常用命令,主要就是增删改查. 另外 ...
- Python对MongoDB增删改查
pip install pymongo import pymongo # 建立连接 client = pymongo.MongoClient() # 指定数据库 (不存在则会新建) db = clie ...
随机推荐
- bootstrap modal的data-dismiss属性
<button type="button" class="btn default" data-dismiss="modal">关 ...
- [iOS翻译]《iOS 7 Programming Cookbook》:iOS文件与文件夹管理(上)
简介: iOS基于OS X,而OSX本身基于Unix操作系统.在iOS里面,操作系统的完全路径结构是不可见的,因为每个APP的数据都存储自身的沙盒里面.沙盒环境实际上听起来像这样:一个只允许当前APP ...
- 20145208 《Java程序设计》第6周学习总结
20145208 <Java程序设计>第6周学习总结 教材学习内容总结 输入与输出 InputStream与OutputStream 从应用程序角度来看,如果要将数据从来源取出,可以使用输 ...
- 学习笔记——Maven实战(十)Maven 3,是时候升级了
去年10月份Apache Maven发布了3.0正式版,而在上个月的22号,Eclipse基金会宣布了Eclipse 3.7(Indigo)的发布,该版本Eclipse最大的新特性之一就是集成了Mav ...
- Windows 2008如何绑定MAC防范ARP攻击!
Windows 2008如何绑定MAC防范ARP攻击! 阅读(1974)暂无评论时间:2010-11-23 22:52:13 在Windows server 2003时代,通过arp 这命令即 ...
- 开源分布式计算引擎 & 开源搜索引擎 Iveely 0.5.0 为大数据而生
Iveely Computing 产生背景 08年的时候,我开始接触搜索引擎,当时遇到的第一个难题就是大数据实时并发处理,当时实验室的机器我们可以随便用,至少二三十台机器,可以,却没有程序可以将这些机 ...
- 端口扫描之王——nmap入门精讲(一)
端口扫描在百度百科上的定义是: 端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关),但是端口扫描不但可以为黑客所利 ...
- Orchard 刨析:前奏曲
Orchard中大量使用了依赖注入,而实现依赖注入的组件就是Autofac,它在Orchard中扮演者非常重要的角色,多租户如是,模块如是,工作区也如是.今天就来讲讲Autofac在Orchard中的 ...
- TO~亲爱的自己
你累的时候,谢绝别人的肩膀: 你扛不动的时候,拒绝别人的帮忙: 你和别人吃饭,不让别人买单你总是想我这样优秀善良, 总不给别人添麻烦,为什么总是找不到爱的人呢? 有时,爱只有在相处时才能找得到的, 是 ...
- 工作的思考十五:升职前需要做的准备(TeamLeader)
当一个人在公司的工作年限以及经验的积累到达一个程度的时候,升职其实是件高兴的事,但面临角色的转变需要提前做些准备的. 其实如果你对你的职业规划很清楚的话,那么你就应该在升职之前就会开始进行角色的转换. ...