Mongodb数据库教程
Mongodb数据库
目录
mongodb的介绍
-
mongodb的介绍
- 什么是mongodb
- mongodb 是一个功能最丰富的NoSQL非关系数据库。由 C++ 语言编写。 mongodb 本身提供S端存储数据,即server;也提供C端操作处理(如查询等)数据,及client
- 什么是mongodb
-
SQL和NoSQL的主要区别
- 在SQL中层级关系: 数据库>表>数据 而在NoSQL中则是: 数据库>集合>文档
-
数据之间无关联性
-
SQL中如何需要增加外部关联数据的话,规范化做法是在原表中增加一个外键,关联外部数据表 NoSQL则可以把外部数据直接放到原数据集中,以提高查询效率。缺点也比较明显,对关联数据做更新时会比较麻烦。
SQL中在一个表中的每条数据的字段是固定的。而NoSQL中的一个集合(表)中的每条文档(数据)的key(字段)可以是互不相同的。
-
-
拓展阅读
-
mongodb作为非关系型数据库相较于关系型数据库的优势
-
易扩展: NoSQL数据库种类繁多, 但是一个共同的特点都是去掉关系数据库的关系型特性。 数据之间无关系, 这样就非常容易扩展
大数据量,高性能: NoSQL数据库都具有非常高的读写性能, 尤其在大数据量下表现优秀。 这得益于它的非关系性,数据库的结构简单
灵活的数据模型: NoSQL无需事先为要存储的数据建立字段, 随时可以存储自定义的数据格式。 而在关系数据库中, 增删字段是一件非常麻烦的事情。 如果是非常大数据量的表, 增加字段简直就是一个噩梦
-
mongodb的安装
以ubuntu18.04为例
-
命令安装
-
在ubuntu中使用apt-get工具安装
sudo apt-get install -y mongodb-org
-
-
源码安装
-
选择相应版本和操作系统并下载
-
解压
tar -zxvf mongodb-linux-x86_64-ubuntu1804-4.0.3.tgz
-
移动到/usr/local/目录下
sudo mv -r mongodb-linux-x86_64-ubuntu1804-4.0.3/ /usr/local/mongodb
-
在shell的初始化脚本.bashrc中添加mongodb可执行文件到环境变量PATH中
cd ~ sudo vi .bashrc export PATH=/usr/local/mongodb/bin:$PATH
-
mongodb的中文文档
-
mongodb的简单使用
-
mongodb服务端的使用
- 默认端口:27017
- 默认配置文件的位置:
- /etc/mongod.conf
- 默认日志的位置
- /var/log/mongodb/mongod.log
-
mongodb服务端启动分别两种方式:
- 本地测试方式的启动(只具有本地数据增删改查的功能)
- 生产环境启动(具有完整的全部功能)
-
测试方式启动
- 启动:sudo service mongodb start
- 停止:sudo service mongodb stop
- 重启:sudo service mongodb restart
-
生成环境正式的启动方式
-
sudo mongod [--auth --dbpath=dbpath --logpath=logpath --append --fork] [-–f logfile ]
- 只以 sudo mongod 命令启动时,默认将数据存放在了 /data/db 目录下,需要手动创建
- –dbpath: 指定数据库的存放路径
- –logpath: 指定日志的存放路径
- –append: 或–logappend 设置日志的写入形式为追加模式
- –fork: 或-fork 开启新的进程运行mongodb服务
- –f: 或-f 配置文件路径(可以将上述配置信息写入文件然后通过该文件中的参数进行加载启动)
- –auth: 以权限认证的方式启动,我们会在后边的课程中学习该内容
-
-
查看是否启动成功
ps aux | grep mongod
-
mongodb数据库命令
- 查看当前数据库
- db(没有切换数据库的情况下默认使用test数据库)
- 查看所有的数据库
- show dbs /show databases
- 切换数据库
- use db_name
- 删除当前的数据库
- db.dropDatabase()
- 查看当前数据库
-
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()
- 手动创建集合:
-
简单练习
show dbs # 查看所有数据库 use test # 切换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 exit
-
简单练习
- 常见类型
- Object ID: 文档ID/数据的ID,数据的主键
- String: 字符串,最常用,必须是有效的UTF-8
- Boolean: 存储一个布尔值,true或false
- Integer: 整数可以是32位或64位,这取决于服务器
- Double: 浮点数
- Arrays: 数组/列表
- Object: mongodb中的一条数据/文档,即文档嵌套文档
- Null: 存储null值
- Timestamp: 时间戳,表示从1970-1-1到现在的总秒数
- Date: 存储当前日期或时间的UNIX时间格式
- 注意点
- 每个文档都有一个属性,为_id,保证每个文档的唯一性,mongodb默认使用_id作为主键
- 可以手动设置_id的值,如果没有提供,那么MongoDB为每个文档提供了一个独特的_id, 类型为objectID
- objectID是一个12字节的十六进制数,每个字节两位,一共是24位的字符串:
- 前4个字节为当前时间戳
- 接下来3个字节的机器ID
- 接下来的2个字节中MongoDB的服务进程id
- 最后3个字节是简单的增量值
- 常见类型
mongodb的增删改查
-
mongodb插入数据
-
命令:
- db.集合名称.insert(document)
db.stu.insert({name:'joker',gender:1}) db.stu.insert({_id:"20110101",name:'tom',gender:1}) #测试数据 db.stu.insert({"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true }) db.stu.insert({"name" : "黄蓉", "hometown" : "桃花岛", "age" : 18, "gender" : false }) db.stu.insert({"name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : false }) db.stu.insert({"name" : "黄药师", "hometown" : "桃花岛", "age" : 40, "gender" : true }) db.stu.insert({"name" : "段誉", "hometown" : "大理", "age" : 16, "gender" : true }) db.stu.insert({"name" : "段王爷", "hometown" : "大理", "age" : 45, "gender" : true }) db.stu.insert({"name" : "洪七公", "hometown" : "华筝", "age" : 18, "gender" : true })
注意:插入文档是,如果不指定_id参数,MongoDB会为文档自动分配一个唯一的ObjID
-
-
mongodb的保存
-
命令:
- db.集合名称.save(document)
db.stu.save({_id:'20180101',name:'zhangsan',gender:2}) db.stu.save({name:'zhangsan',gender:2}) db.stu.find()
如果文档的_id已经存在则修改,如果\_id不存在则添加
-
-
mongodb的查询
-
命令:
- db.集合名称.find()
-
方法find():查询
db.集合名称.find({条件文档})
-
方法findOne():查询,只返回第一个
db.集合名称.findOne({条件文档})
-
方法pretty(): 将结果格式化;不能和findOne()一起使用!
db.集合名称.find({条件文档}).pretty()
-
-
比较运算符
方法名 描述 $lte 小于等于 $lt 小于 $gte 大于等于 $gt 大于 $eq 等于 $ne 不等于 $in 包含 $min 不包含 用法:
-
$lte-小于等于
db.collection.find({"field":{$lte:value}});
-
示例
db.c1.find() {"_id":ObjectId("4fb4af85afa87dc1bed94330"),"age":7,"length_1":30} {"_id":ObjectId("4fb4af89afa87dc1bed94331"),"age":8,"length_1":30} {"_id":ObjectId("4fb4af8cafa87dc1bed94332"),"age":6,"length_1":30}
-
查询age的值不等于8的数据,如下面的代码所示:
db.c1.find({age:{$lte:7}}) {"_id":ObjectId("4fb4af85afa87dc1bed94330"),"age":7,"length_1":30} {"_id":ObjectId("4fb4af8cafa87dc1bed94332"),"age":6,"length_1":30}
-
mongodb的索引操作
mongodb的权限索引
mongodb和python交互
下一篇: WPF实现进度条实时更新效果