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反射-初步入门
Java反射-初步入门 学反射先了解什么是反射. 百度百科:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动 ...
- 05-python中函数的使用
函数:就是让程序模块化,把具有独立功能的代码块当成一个整体封装成一个函数 首先打印一个佛主看看: print(" _ooOoo_ ") print(" o8888888o ...
- iOS开发CocoaPods使用
一.为什么用CocoaPods iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三 ...
- Android常见问题——Genymotion无法启动问题
在官网下载了Genymotion和VirturalBox的合集安装之后启动模拟器的时候发现启动不了(默认下载,啥都没干),在网上找了一些方法,也没有解决,最后偶然看到一种方法才解决的,先看一下具体的问 ...
- js之选项卡效果(淘宝侧边栏)
HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- [转载][QT][SQL]sql学习记录2_sqlite数据类型
转载自:sqlite学习网站: http://www.runoob.com/sqlite/sqlite-tutorial.html SQLite 语法 SQLite 是遵循一套独特的称为语法的规则和 ...
- 文件的copy
def mycopy(src_filename, dst_filename): try: fr = open(src_filename, "rb") try: try: fw = ...
- Cannot setup mail box on Android
Error: “You don’t have permission to sync with this server” Solution: “You have 10 phone partnershi ...
- ACM 五一杭电赛码"BestCoder"杯中国大学生程序设计冠军赛小记
对于这项曾经热爱的竞赛,不得不说这是我最后一年参加ACM比赛了,所以要珍惜每一次比赛的机会. 五一去杭电参加了赛码"BestCoder"杯中国大学生程序设计冠军赛,去的队伍包括了今 ...
- HihoCoder1049 后序遍历 分治水题
水题,是为了给难题(树形DP)做铺垫 描述 在参与过了美食节之后,小Hi和小Ho在别的地方又玩耍了一阵子,在这个过程中,小Ho得到了一个非常有意思的玩具——一棵由小球和木棍连接起来的二叉树! 小Ho对 ...