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相关推荐
- windows安装MongoDB环境以及在pycharm中配置可视化插件
安装MongoDB数据库 参考这里 安装PyMongo python3 -m pip3 install pymongo指定版本 python3 -m pip3 install pymongo==3.5 ...
- SQL与NoSQL的区别 以MySQL与MongoDB为例
异同对比 1.语言和结构层面 SQL数据库,是基于表的,并且用结构化语言也就是SQL来定义和操纵数据.一方面,这是非常强大的:SQL是最通用和最广泛使用的选项之一,使其成为一个安全的选择,尤其适用于复 ...
- php配置mongodb扩展、安装mongodb服务教程
安装mongodb服务. 1.下载mongodb: mongodb 提供了可用于 32 位和 64 位系统的,你可以从mongodb官网下载安装. mongodb下载地址:https://www.mo ...
- MongoDB之conf配置文件详解
详细看一下mongodb配置文件. mongodb.conf # mongodb.conf# 数据库文件位置 dbpath=/var/lib/mongodb#日志文件的路径 logpath=/var/ ...
- CentOS7.4 安装mongodb
温馨提示:我的环境是腾讯云自带的CentOS7.4 x64 镜像,本地环境是win10 x64 专业版,ssh工具是用的win10 自带的cmd, 远程工具版本是Robo 3T 1.2.1 . 如果环 ...
- Centos7下安装MongoDB
简介 MongoDB 是一个基于分布式 文件存储的NoSQL数据库 由C++语言编写,运行稳定,性能高 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案 查看官方网站 MongoDB特点 模式自 ...
- php mongodb execute,php简单操作mongodb
您现在的位置是:网站首页>>PHP>>php php简单操作mongodb 发布时间:2019-09-29 16:34:25作者:wangjian浏览量:525点赞量:0 一: ...
- 【MongoDB异常】Exception authenticating MongoCredential解决方法
我们通过ideal编辑器编辑 springboot时候,出现这个错误: com.mongodb.MongoSecurityException: Exception authenticating Mon ...
- mongodb插入数据获取本次插入的mongodb id
最近接了一个别人的项目做二次开发,使用php进行mongodb的数据操作时,需要插入数据后得到相应的mongodb 中的id,简单代码如下 $data = array('test' => 'aa ...
最新文章
- 使用PHP+Sphinx建立高效的站内搜索引擎
- svn命令行 批量添加(add)所有新增文件
- 【风险管理】(第一篇)风险管理核心指标
- 成功解决AttributeError: 'list' object has no attribute 'shape'
- 77. 组合(回溯算法)
- JavaScript——易班优课YOOC课群在线测试禁止右键和复制解决方案
- libwacom9 : Depends: libwacom-common (= 2.2.0-1) but 1.12-1 is to be installed
- MySQL备份与恢复详解(热备、冷备等相关术语解释)
- BZOJ1008[HNOI2008] 越狱
- 超详细纯前端导出excel并完成各种样式的修改(xlsx-style)
- 日常问题(bug)反馈/回复的标准格式
- bp神经网络预测python人口预测_BP神经网络人口预测程序(matlab实现)
- 网易MUMU模拟器怎么设置不卡?
- windows10不能调节亮度的问题,始终显示0%或最暗
- 32强鹏城逐战!“共筑梦想、创赢未来” 2021年绿色产业创新创业大赛深圳赛区比赛精彩上演
- 怎么将图片压缩到最小,用什么方法
- php 粘性表单功能,php 粘性表单验证
- 【转】智能合约灵活升级
- 干洗加盟连锁业德国卡柏的SEO案例研讨(转)
- 国芯方案——胎压计芯片方案SIC8632
热门文章
- Golang实现IP地址匹配
- “熊猫烧香”主犯:毒王?黑客英雄?
- 优秀领导者必读的8本管理学书籍
- python opencv打开摄像头,截图保存
- GEF原理及实现系列(二、模型)
- 跳出横向的、孤立的牵绊,真正站在新的角度来看待Web3.0
- 分析称诺基亚仅押宝WP成自救牵绊
- jQuery学习(菜鸟教程)
- 【论文阅读】[CVPR 2018] PU-Net: Point Cloud Upsampling Network. [tensorflow] [rec. oth.]
- 信息学奥赛一本通C++语言-----1120:同行列对角线的格