做司考题的网站,云指官网,网站是怎么优化的,wordpress本地导出一、Mongodb的介绍和安装
学习目标
了解 非关系型数据库的优势了解 mongodb的安装 1. mongodb的介绍
1.1 什么是mongodb
mongodb 是一个功能最丰富的NoSQL非关系数据库。由 C 语言编写。mongodb 本身提供S端存储数据#xff0c;即server#xff1b;也提供C端操作处理 语言编写。mongodb 本身提供S端存储数据即server也提供C端操作处理如查询等数据即client。
1.2 SQL和NoSQL的主要区别
在SQL中层级关系 数据库表数据而在NoSQL中则是 数据库集合文档
1.2.1 数据之间无关联性
SQL中如何需要增加外部关联数据的话规范化做法是在原表中增加一个外键关联外部数据表。NoSQL则可以把外部数据直接放到原数据集中以提高查询效率。缺点也比较明显对关联数据做更新时会比较麻烦。SQL中在一个表中的每条数据的字段是固定的。而NoSQL中的一个集合(表)中的每条文档(数据)的key(字段)可以是互不相同的。
1.2.2 拓展阅读 https://www.cnblogs.com/jeakeven/p/5402095.html 1.3 mongodb作为非关系型数据库相较于关系型数据库的优势 易扩展 NoSQL数据库种类繁多 但是一个共同的特点都是去掉关系数据库的关系型特性。 数据之间无关系 这样就非常容易扩展 大数据量高性能 NoSQL数据库都具有非常高的读写性能 尤其在大数据量下表现优秀。 这得益于它的非关系性数据库的结构简单 灵活的数据模型 NoSQL无需事先为要存储的数据建立字段 随时可以存储自定义的数据格式。 而在关系数据库中 增删字段是一件非常麻烦的事情。 如果是非常大数据量的表 增加字段简直就是一个噩梦 2. mongodb的安装 以ubuntu18.04为例 mongodb具有两种安装方式命令安装 或 源码安装
2.1 命令安装
在ubuntu中使用apt-get工具安装
sudo apt-get install -y mongodb-org或参考官方文档 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/ 2.2 源码安装
2.2.1 选择相应版本和操作系统并下载 https://www.mongodb.com/download-center/community?jmpdocs 2.2.2 解压 tar -zxvf mongodb-linux-x86_64-ubuntu1804-4.0.3.tgz 2.2.3 移动到/usr/local/目录下 sudo mv -r mongodb-linux-x86_64-ubuntu1804-4.0.3/ /usr/local/mongodb 2.2.4 在shell的初始化脚本.bashrc中添加mongodb可执行文件到环境变量PATH中 a. 进入.bashrc文件中 cd ~
sudo vi .bashrcb. 在.bashrc文件的最后添加 export PATH/usr/local/mongodb/bin:$PATH3. mongodb的官方文档 https://docs.mongodb.com/manual/introduction/ 小结
了解 非关系型数据库的优势 易扩展高性能灵活的数据字段 了解 mongodb的安装 sudo apt-get install -y mongodb-org 二、mongodb的简单使用
学习目标
掌握 服务端的启动掌握 客户端的使用掌握 mongodb的数据库和集合命令了解 文档中的_id字段 1. mongodb服务端的启动
默认端口27017默认配置文件的位置/etc/mongod.conf默认日志的位置/var/log/mongodb/mongod.log
mongodb服务端启动分别两种方式
本地测试方式的启动只具有本地数据增删改查的功能生产环境启动具有完整的全部功能
1.1 测试方式启动
启动: sudo service mongod start (sudo service mongod start)停止: sudo service mongod stop重启: sudo service mongod restart
1.2 生产环境正式的启动方式 启动: sudo mongod [–auth --dbpathdbpath --logpathlogpath --append --fork] [-–f logfile ] 只以 sudo mongod 命令启动时默认将数据存放在了 /data/db 目录下需要手动创建–dbpath: 指定数据库的存放路径–logpath: 指定日志的存放路径–append: 或–logappend 设置日志的写入形式为追加模式–fork: 或-fork 开启新的进程运行mongodb服务–f: 或-f 配置文件路径(可以将上述配置信息写入文件然后通过该文件中的参数进行加载启动)–auth: 以权限认证的方式启动我们会在后边的课程中学习该内容
1.3 查看是否启动成功 ps aux | grep mongod 2. 启动mongodb的客户端进入mongo shell
启动本地客户端: mongo查看帮助mongo –help退出exit或者ctrlc
3. mongodb的简单使用 开启mongodb server的情况下在进入mongo shell后就可以做简单的使用了 3.1 mongodb数据库的命令
查看当前的数据库db(没有切换数据库的情况下默认使用test数据库)查看所有的数据库show dbs /show databases切换数据库use db_name db_name为show dbs后返回的数据库名 删除当前的数据库db.dropDatabase()
3.2 mongodb集合的命令
无需手动创建集合 向不存在的集合中第一次添加数据时集合会自动被创建出来手动创建集合 db.createCollection(name,options)db.createCollection(“stu”)db.createCollection(“sub”, { capped : true, size : 10 } )参数capped默认值为false表示不设置上限值为true表示设置上限参数size集合所占用的字节数。 当capped值为true时需要指定此参数表示上限大小当文档达到上限时 会将之前的数据覆盖单位为字节 查看集合show collections删除集合db.集合名称.drop()检查集合是否设定上限: db.集合名.isCapped()
3.3 简单练习 在mongo shell中输入下列命令查看结果 show dbs
use test
show collections
db
db.stu.insert({name:郭靖, age:22})
show dbs
show collections
db.stu.find()
db.stu.drop()
show collections
db.dropDatabase()
show dbs
exit3.3 mongodb中常见的数据类型了解
3.3.1 常见类型
Object ID 文档ID/数据的ID数据的主键String 字符串最常用必须是有效的UTF-8Boolean 存储一个布尔值true或falseInteger 整数可以是32位或64位这取决于服务器Double 浮点数Arrays 数组/列表Object mongodb中的一条数据/文档即文档嵌套文档Null 存储null值Timestamp 时间戳表示从1970-1-1到现在的总秒数Date 存储当前日期或时间的UNIX时间格式
3.3.2 注意点 每个文档都有一个属性为_id保证每个文档的唯一性mongodb默认使用_id作为主键 可以手动设置_id的值如果没有提供那么MongoDB为每个文档提供了一个独特的_id 类型为objectID objectID是一个12字节的十六进制数,每个字节两位一共是24位的字符串 前4个字节为当前时间戳接下来3个字节的机器ID接下来的2个字节中MongoDB的服务进程id最后3个字节是简单的增量值
小结
服务端的启动 sudo mongod --dbpath数据库路径 进入mongo shell客户端 mongo mongodb的数据库和集合命令 show dbsuse db_nameshow collectionsdbdb.集合名.drop()db.dropDatabase()exit 了解文档中的_id字段 三、Mongodb的的增删改查
学习目标
掌握 mongodb插入数据的方法掌握 mongodb保存数据的方法掌握 mongodb查询数据的方法掌握 mongodb查询结果的处理方法掌握 mongodb更新数据的方法掌握 mongodb删除数据的方法 1. mongodb插入数据
命令db.集合名称.insert(document)
db.stu.insert({name:gj, gender:1})
db.stu.insert({_id:20170101, name:gj, gender:1})插文档时如果不指定_id参数MongoDB会为文档自动分配一个唯一的ObjectId
2. mongodb的保存
命令db.集合名称.save(document)
db.stu.save({_id:20170101, name:gj, gender:2})
db.stu.save({name:gj, gender:2})
db.stu.find()use python21db.nor_col.insert([{name : 郭靖, hometown : 蒙古, age : 20, gender : true },
{name : 黄蓉, hometown : 桃花岛, age : 18, gender : false },
{name : 华筝, hometown : 蒙古, age : 18, gender : false },
{name : 黄药师, hometown : 桃花岛, age : 40, gender : true },
{name : 段誉, hometown : 大理, age : 16, gender : true },
{name : 段王爷, hometown : 大理, age : 45, gender : true },
{name : 洪七公, hometown : 华筝, age : 18, gender : true }])db.nor_col.find()db.nor_col.save({_id:5f08167af3eeea620efced4f,name:zzz,gender:2})
db.nor_col.find()db.nor_col.save({_id:5f081671111111111111,name:pppp,gender:2})
db.nor_col.find()如果文档的_id已经存在则修改如果_id不存在则添加
3 mongodb的查询
命令db.集合名称.find() 可以使用以下数据进行练习 db.stu.insert([{name : 郭靖, hometown : 蒙古, age : 20, gender : true },
{name : 黄蓉, hometown : 桃花岛, age : 18, gender : false },
{name : 华筝, hometown : 蒙古, age : 18, gender : false },
{name : 黄药师, hometown : 桃花岛, age : 40, gender : true },
{name : 段誉, hometown : 大理, age : 16, gender : true },
{name : 段王爷, hometown : 大理, age : 45, gender : true },
{name : 洪七公, hometown : 华筝, age : 18, gender : true }])3.1 简单查询 方法find() 查询 db.集合名称.find({条件文档}) 方法findOne()查询只返回第一个 db.集合名称.findOne({条件文档}) 方法pretty() 将结果格式化不能和findOne()一起使用 db.集合名称.find({条件文档}).pretty()
3.2 比较运算符
等于 默认是等于判断 没有运算符小于$lt less than小于等于$lte less than equal大于$gt greater than大于等于$gte不等于$ne
查询年龄大于18的所有学生
db.stu.find({age:{$gte:18}})3.3 逻辑运算符 逻辑运算符主要指与、或逻辑 and在json中写多个条件即可
查询年龄大于或等于18 并且性别为true的学生
db.stu.find({age:{$gte:18},gender:true})or:使用$or 值为数组 数组中每个元素为json
查询年龄大于18 或性别为false的学生
db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})查询年龄大于18或性别为男生 并且姓名是郭靖
db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:gj})3.4 范围运算符
使用$in $nin 判断数据是否在某个数组内
查询年龄为18、 28的学生
db.stu.find({age:{$in:[18,28,38]}})3.5 支持正则表达式
使用$regex编写正则表达式
查询name以黄开头的数据
db.stu.find({name:{$regex:^黄}})3.6 自定义查询 mongo shell 是一个js的执行环境 使用$where 写一个函数 返回满足条件的数据 查询年龄大于30的学生
db.stu.find({$where:function() {return this.age30;}
})3.7 skip和limit
方法limit() 用于读取指定数量的文档
db.集合名称.find().limit(NUMBER)
查询2条学生信息
db.stu.find().limit(2)方法skip() 用于跳过指定数量的⽂档
db.集合名称.find().skip(NUMBER)
db.stu.find().skip(2)同时使用
db.stu.find().limit(4).skip(5)
db.stu.find().skip(5).limit(4)注意先使用skip在使用limit的效率要高于前者
3.8 投影
在查询到的返回结果中 只选择必要的字段
命令db.集合名称.find({},{字段名称:1,...})
参数为字段与值 值为1表示显示 值为0不显 特别注意
对于_id列默认是显示的 如果不显示需要明确设置为0对于其他不显示的字段不能设置为0
db.stu.find({},{_id:0,name:1,gender:1})
3.9 排序
方法sort() 用于对查询结果按照指定的字段进行排序
命令db.集合名称.find().sort({字段:1,...})
参数1为升序排列 参数-1为降序排列
根据性别降序 再根据年龄升序
db.stu.find().sort({gender:-1,age:1})3.10 统计个数
方法count()用于统计结果集中文档条数
命令db.集合名称.find({条件}).count() 命令db.集合名称.count({条件})
db.stu.find({gender:true}).count()
db.stu.count({age:{$gt:20},gender:true})去重 对年龄为18岁的查询记录进行去重
4 mongodb的更新
db.集合名称.update({query}, {update}, {multi: boolean})参数query:查询条件参数update:更新操作符参数multi:可选默认是false表示只更新找到的第一条数据值为true表示把满足条件的数据全部更新
db.stu.update({name:hr},{name:mnc}) # 全文档进行覆盖更新
db.stu.update({name:hr},{$set:{name:hys}}) # 指定键值更新操作
db.stu.update({},{$set:{gender:0}},{multi:true}) # 更新全部注意“multi update only works with $ operators”
multi参数必须和$set一起使用 批量更新更新查询到的记录 批量更新添加一个新的字段school: 查询到name为zzz的记录相同则不做任何操作不相同则进行更新操作
没有查询到name为hhh的记录所以 插入一条新的记录
5 mongodb的删除
db.集合名称.remove({query}, {justOne: boolean})- 参数query:可选删除的⽂档的条件
- 参数justOne:可选 如果设为true或1则只删除一条默认false表示删除全部小结
mongo shell中的增 db.集合名.insert({数据}) db.集合名.save({包含_id的完整数据}) # 根据指定的_id进行保存存在则更新不存在则插入mongo shell中的删 db.集合名.remove({条件}, {justOne: true/false})mongo shell中的改 db.集合名.update({条件}, {$set:{完整数据/部分字段}}, {multi: true/false})mongo shell中的查 db.集合名.find({条件}, {字段投影})