MongoDB day02
1、非关系型数据库和关系型数据库比较
1. 不是以关系模型构建的,结构自由
2. 非关系型数据库不保证数据的一致性
3. 非关系型数据库可以在处理高并发和海量数据时弥补关系型数据库的不足
4. 非关系型数据库在技术上没有关系型数据库成熟也没有sql语句的操作
2、mongoDB文档型数据库
创建数据库: use databaseName
删除数据库: db.dropDatabase()
创建集合: db.createCollection() / db.collection.insert()
删除集合: db.collection.drop()
重命名集合: db.collection.renameCollection() / db.getCollection()
查看数据库: show dbs
查看集合: show tables / show collections
插入文档: insert() / save()
3、文档 bson www.mongodb---->docs查看文档帮助
#######################################################################################
查找操作:
mysql: select ... fron table where ...
mongo: db.collection.find(query,field)
参数:query 筛选条件,相当于where字句(键值对)
field 选择要展示的域(键值对)
db.collection.find() ----》select * from table
query:以键值对的形式给出查找条件
e.g. db.class0.find({name:'Lucy'})
field: 以键值对的形式给出要展示(不要展示的域)
域名为键,0为值表示不显示该域;1为值表示显示该域
e.g. db.stu.find({},{_id:0})
* 如果使用0设置某些域不显示则默认其他域显示;如果使用1设置某些域显示则默认其他域不显示
* ——ID比较特殊,只有设置为0才不显示否则默认显示,
* 除了ID域,其他的域必须同时设置为0或者1
* 如果不写改参数,则默认显示所有内容
e.g. db.stu.find({sex:'m'},{_id:0,name:1,age:1})
findOne(query,field)
功能:查找符合条件的第一条文档
参数:同find
返回值:查找到的文档
e.g. db.class0.findOne({age:17},{id:0}) # 只显示第一条文档
query更丰富的用法
操作符;使用$号注明的第一个特殊意义字符串,表达某个特定含义,比如$gt表示大于
比较操作符
$eq 等于 e.g. db.stu.find({age:{$eq:18}},{_id:0})
$lt 小于 e.g. db.stu.find({age:{$lt:28}},{_id:0})
字符串也能进行比较 e.g. db.class0.find({name:{$lt:'Tom'}},{_id:0})
$lte 小于等于 <= db.stu.find({age:{$lte:27}},{_id:0})
$gt 大于 > db.class0.find({age:{$gt:17}},{_id:0})
$gt 大于等于 >= db.class0.find({age:{$gte:17}},{_id:0})
$ne 不等于 != e.g. db.class0.find({age:{$ne:17}},{_id:0})
$in 包含 e.g.查找年龄在[16 18]中的 db.class0.find({age:{$in:[16,18]}},{_id:0})
$nin 不包含 e.g. 不是16 17的都找到 db.class0.find({age:{$nin:[16,17]}},{_id:0})
逻辑操作符
$and 逻辑与
* query 中如果多个条件用逗号隔开即为and关系
e.g.年龄为17并且为男 db.class0.find({age:17,sex:'m'},{id:0})
e.g.年龄大于13并且小于18 db.class0.find({age:{$gt:13,$lt:18}},{_id:0})
$or 逻辑或
e.g. 年龄大于30或性别为女 db.class1.find({$or:[{age:{$gt:30}},{sex:'w'}]},{_id:0})
$not 逻辑非
年龄不等于17 db.class0.find({age:{$not:{$eq:17}}},{_id:0})
$nor 既不也不
e.g. 查找年龄不等于17,性别不为男的 db.class0.find({$nor:[{age:17},{sex:'m'}]},{_id:0})
条件混合
(年龄大于30 并且叫阿宝) 或者 性别为 w db.class1.find({$or:[{age:{$gt:30},name:'阿宝'},{sex:'w'}]},{_id:0})
(年龄小于30或者大于33) 并且 性别为 w db.class1.find({$or:[{age:{$lt:30}},{age:{$gt:33}}],sex:'w'},{_id:0})
数组
表达 : 使用中括号将一定的数据组织成一种数据结构
* 数组是有序的;数组中的数据类型可以不同
e.g. 数组值中只要有任意一项大于90即可 db.class2.find({score:{$gt:90}},{_id:0})
$ size 通过数组中元素的个数查找
e.g. 查找数组中包含两项的文档 db.class2.find({score:{$size:2}},{_id:0})
$all 查找数组中同时包含多项的文档
e.g. 数组中同时包含88和90 db.class2.find({score:{$all:[88,90]}},{_id:0})
$slice 取数组的部分进行显示,在field中声明
e.g. 显示数组中前两项 db.class2.find({},{_id:0,score:{$slice:2}})
e.g. 跳过第一项显示后面两项 db.class2.find({},{_id:0,score:{$slice:[1,2]}})
其他query查询
$exixts
判断一个与是否存在
e.g. 查找有sex域的文档(true表示存在,false表示不存在) db.class0.find({sex:{$exists:true}},{_id:0})
$mod 余数查找
e.g. 除以2余1的 db.class0.find({age:{$mod:[2,1]}},{_id:0})
$type 数据类型查找
e.g. 查找age值类型是1的 db.class1.find({age:{$type:1}},{_id:0})
操作符用法文档查找
www.mongodb.com ---> docs ---->search
查找结果的进一步操作
distinct() 查看集合中某个域的取值范围
e.g. 查看年龄的取值范围 db.class1.distinct('age')
pretty() 将查询结果格式化显示
e.g. db.class1.find().pretty()
limit(n) 显示查找结果的前n条文档
e.g. 显示查找到的文档的前3条 db.class1.find({},{_id:0}).limit(3)
skip(n) 跳过前n条显示后面的内容
e.g. 跳过查找到的前三条,显示后面的内容 db.class1.find({},{_id:0}).skip(3)
count() 计数统计
e.g. 统计查找数量 db.class1.find({},{_id:0}).count()
sort({field:1/-1}) 对查找结果排序
参数 : 以键值对形式给出,键表示按照哪个域排序;1表示升序,-1表示降序
e.g. 对查找结果按照年龄升序排序 db.class1.find({},{_id:0}).sort({age:1})
复合排序: 当第一排序项相同的时候按照第二排序项排序,以此类推
e.g. 当年龄相同时,按照姓名进行排序 db.class0.find({},{_id:0}).sort({age:1,name:1})
函数的连续调用
当一个函数的返回结果仍然是文档集合的时候可以连续调用函数
e.g. 查看年龄最小的三个文档 db.class1.find({},{_id:0}).sort({age:1}).limit(3)
文档删除操作
mysql : delete from table where ...
mongodb : db.collection.remove(query,justOne)
remove(query,justOne) 删除文档
参数 : query 筛选要删除的文档,相当于where;用法同 查找
justOne 布尔值
默认为False 表示删除所有复合条件的文档;如果设置为true 则表示只删除第一条复合条件文档
e.g. 删除年龄域值不是数字类型的 db.class1.remove({age:{$not:{$type:1}}})
e.g. 删除第一个年龄为17的文档 db.class0.remove({age:17},true)
删除一个集合中所有文档 db.collection.remove({})
e.g. 删除class0中所有文档 db.class0.remove({})
练习:
1、创建数据库 名字 grade use grade
2、数据库中创建集合 名字 class
3、集合中插入若干文档格式如下
{name:'zhang',age:10,sex:'m',hobby:['a','b'......]}
年龄在4-13之间
hobby几项都可以,可选项:draw sing dance baskeball dootball pingpong running computer
db.class.insert({name:'zhang',age:10,sex:'m',hobby:['a','b'...]})
4、查询练习
查看班级所人信息 find()
查看年龄大于10岁的学生信息 find({age:{$gt:10}})
查看年龄 8-11 岁之间的学生信息 find({age:{$gt:8,$lt:11}})
找到年龄9岁且为男生的学员 find({age:9,sex:'m'})
找到年龄小于7岁或者大于11岁的学生 find({$or:[{age:{$gt:11}},{age:{$lt:7}}]})
找到年龄8岁或者11岁的学生 find({age:{$in:[8,11]}})
找到有两项兴趣爱好的学生 find({hobby:{$size:2}})
找到喜欢computer的学生 find({hobby:"computer"})
找到既喜欢画画,又喜欢跳舞的学生 find({hobby:{$all:['draw','dance']}})
统计兴趣爱好有3项的学生人数 find({hobby:{$size:3}}).count()
找到本班年龄第二大的学生 find({}).sort({age:-1}).skip(1).limit(1)
查看学生学生兴趣爱好的范围 db.class.distinct('hobby')
找到年龄最小的三个同学 find({}).sort({age:1}).limit(3)
删除虽有年龄小于6岁或者大于12岁的学员 remove({$or:[{age:{$lt:6}},{age:{$gt:12}}]})
修改操作
mysql : update table set ... where ...
mongodb : db.collection.update(query,update,upsert,multi)
功能 : 修改文档
参数 : query 筛选要修改的文档,相当于where用法同查找
update :将筛选的文档修改为什么内容,相当于set。 需要配合修改操作符一同使用
upsert : bool值,默认为false。如果query的文档不存在则不进行任何操作
如果设置为true则如果query的文档不存在就根据query和update插入新文档
multi : bool值,默认为false。如果query文档有多条则只修改第一条
如果设置为true 则修改所有符合条件文档
e.g. 将小白年龄改为31 db.class1.update({name:'小白'},{$set:{age:31}})
e.g. 修改文档,如果文档不存在则插入 db.class1.update({name:'阿蓉'},{$set:{age:29}},true)
e.g. 如果有多个年龄小于32的则全部修改 db.class1.update({age:{$lt:32}},{$set:{age:28}},false,true)
作业:练习查找、删除操作、记忆操作符使用;回顾文档的查找方法;将课上练习再进行熟练。
MongoDB day02的更多相关文章
- day02 MySQL基本操作
day02 MySQL基本操作 昨日内容回顾 数据库演变史 1.纯文件阶段 2.目录规范 3.单机游戏 4.联网游戏 # 数据库就是一款帮助我们管理数据的程序 软件开发架构及数据库本质 cs架构与bs ...
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- MongoDB系列(二):C#应用
前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...
- MongoDB系列(一):简介及安装
什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为应用提供可扩展的高 ...
随机推荐
- java中+=详解 a+=b和a=a+b的区别
short a=10; a+=4; System.out.println(a); 1.第一段代码的输出结果为14.执行流程是首先声明变量,判断赋给变量的初始值是否在short类型范围内,如果在则进行强 ...
- Alpha冲刺一 (2/10)
前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/9960487.html 作业博客:https://edu.cnblogs.com/campus/ ...
- 国内知名的自然语言处理(NLP)团队
工业界 腾讯人工智能实验室(Tencent AI Lab) 百度自然语言处理(Baidu NLP):对外提供了百度AI开放平台,王海峰(现任百度副总裁,AI技术平台体系AIG总负责人) 微软亚洲研究院 ...
- Java堆空间溢出解决方法 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
一般通过java -jar filename.jar运行jar包,但是当运行的java程序需要较大的内存时,可能会造成堆空间溢出. 例如,加载了几个G大小的json文件,运行报错: Exception ...
- 为什么要重写toString()方法和hashcode()方法
一.toString(): 在Object类里面定义toString()方法的时候返回的对象的哈希code码,这个hashcode码不能简单明了的表示出对象的属性.所以要重写toString()方法. ...
- Vue之拦截与响应拦截
vue中有一个拦截方法,当我们发起请求或者请求回来的时候,我们需要做一定的数据过滤或者拦截 下面是在开发项目时进行的一个axios的请求封装: 拦截器:就是我们在请求之前进行的一个操作比如说,我们可以 ...
- CentOS下glibc更新
使用java -agentpath=xxx时报该错,提示glibc版本过低:version `GLIBC_2.14' not found (required by /data/jjns/UEISecu ...
- 【paper】KDD15 - Interpreting Advertiser Intent in Sponsored Search
Interpreting Advertiser Intent in Sponsored Search 主要内容是搜索广告的相关性预估模型,使用learning to rank的方法.亮点在于使用了 ...
- ZOJ3551Bloodsucker (数学期望)
In 0th day, there are n-1 people and 1 bloodsucker. Every day, two and only two of them meet. Nothin ...
- 每天一个linux命令(文件操作):【转载】find 命令的参数详解
find一些常用参数的一些常用实例和一些具体用法及注意事项. 1.使用name选项: 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用.可以使用某种文件名模式来匹配文件 ...