MongoDB 介绍
非关系数据库
mongoDB面对的是非关系数据库,非关系是针对关系数据库所提出的概念。
SQLserver 是目前最受欢迎的关系数据库,数据是根据表格形式存储的,我们在建立工程之前必须提前设计好工程的主体,各个如主体之间的关系,因为随后输入的数据是按这些表格要求对应输入的。如下图,是一个书籍表,每一行表示一个书籍信息,每个信息都包括分类号,书名,出版社,作者,出版日期,书籍总数,余量等属性,需要依次对应。
按照表格输入逻辑严谨,不易出错,但是数据并不是都是表格形式的,我们会遇到非结构型数据(Unstructured data),SQL对于这类数据的处理就不太合适了。
下图为mongoDB中的数据形式
MongoDB数据为文档形式,数据结构有<Field>:<Value>键值对来表示,Value值可为数值,字符串,数组和其他文档,操作更简单灵活
分布式存储
MongoDB集群会将数据分布在不同的cluster中,这样做的目的是为了防止某一个存储点的损坏造成整个数据库的无法访问。
如下图,MongoDB将数据存储在三个不同的地方,主要访问的为primary,当primary损坏时会自动访问secondary节点中的数据,使数据库容错率高。
MongoDB安装
1.官网下载
https://www.mongodb.com/download-center/community
Version:选择最新版本
OS:操作系统,分别有linux,macOS,Windows版本
2.软件安装
这里选择Custom安装会更快
记住这里的路径,接下来环境路径配置需要使用到
这里选择作为服务器运行
MongoDB Compress是MongoDB的可视化软件,这里可以选择不安装,下面文章会涉及怎样手动安装
接下来按照图片上就能操作成功啦
安装完毕,我们进入之前的安装路径会看到下图
接下来我们来配置一下环境变量,方便接下来的脚本操作,将上图中bin的位置添加环境变量当中
我们的MongoDB算是正式安装好啦,WIN+R打开控制台窗口,输入mongod.exe,这是mongo的服务器启用,如下图中显示端口27017正在等待连接,就说明mongo被启用了
再WIN+R打开另一个控制台,输入mongo.exe,就可以开始使用MongoDB了,数据库具体使用部分可以看文章第五部分
Mongo Atlas安装
mongo Altas 是mongo 提供的在线分布式数据库系统,只需要使用网页就可以实现分布式数据库。目前提供500M的免费大小,这个大小对于学生党来说已经够用了
1.官网
https://www.mongodb.com/cloud/atlas
使用邮箱注册就可以使用
选择存储的服务器和地点,就选个亚洲服务器吧
创建一个项目名
创建好工程后,出现的集群,包含三个节点
连接到服务器,点击上图Connect,出现下图,在IP地址中填全部地址0.0.0.0,随后创建访问账户,使用名和密码jie
接下来会出现连接的不同方式,第一种是连接到脚本控制台的连接,第二种是应用到其他软件中的连接,第三种则是连接到MongoDB可视化工具中的连接
Mongo Compress 安装
Mongo Compress 是MongoDB 的可视化工具,可直接在软件中进行数据读取和管理
1.官网下载
https://www.mongodb.com/download-center/community
platform选择你想要的亚子
2.选择连接的方式
这是直接连接我们计算机刚刚创建的mongoDB,直接点击connect就可以连接
这是连接通过Mongo Altas创建的集群,复制Mongo Altas 连接中连接到Compress的连接
在复制后进入Compress会自动跳转到以下界面,输入在Altas里设置的密码点击connect
连接成功,可以查看节点中的数据
MongoDB操作
1.创建数据库
Use <Database> (使用Database,若不存在则创建)
2.在数据库下创建集合Collection
db.<Collection>.insertOne(Document): 插入一个文档到Collection中,若Collection不存在则创建一个
db.inventory.insertOne({ item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } })
db.<Collection>.insertMany([Document1,Document2,…]): 插入多个文档到collection中
db.inventory.insertMany([{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }]);
3.查询
db.<collection>.find({<field>:<value>}):寻找field值为value的文档
3.1 全查询db.<collection>.find({}): 查找collection中的所有文档
3.2 条件查询
db.<collection>.find({status:”D”}): 查找状态为D的物品
db.inventory.find( { status: { $in: [ "A", "D" ] } } ) :查询状态为A和D的物品
3.3 And/Or
db.inventory.find( { status: "A", qty: { $lt: 30 } } ) :查询状态为A且库存少于30的物品
db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } ):查询状态为A或库存少于30的人
查询状态为A,且数量少于30或item以p开头的物品
db.inventory.find( {
status: "A",
$or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )
4.更新
db.inventory.updateOne(
{ item: "paper" },
{
$set: { "size.uom": "cm", status: "P" },
$currentDate: { lastModified: true }
}
)
$set: 将item为paper的文档中size.uom更新为cm, status更新为p
$currentDate:更新,若是更新内容field不存在,则新建
查询插入结果
更新多个文档
db.inventory.updateMany(
{ "qty": { $lt: 50 } },
{
$set: { "size.uom": "in", status: "P" },
$currentDate: { lastModified: true }
}
)
查询插入结果
替换原文档
db.inventory.replaceOne(
{ item: "paper" },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)
查询替换结果
5.删除
db.inventory.deleteMany({ status : "A" }) :删除所有状态为A的物品
db.inventory.deleteOne( { status: "D" } ) :删除状态为D物品中的第一个文档
db.inventory.drop(): 删除集合inventory
db.dropDatabase(): 删除数据库