一、mongodb简介
mongodb是一个基于分布式文件存储的数据库,由c++语言编写,主要用于web应用提供可扩展的高性能数据存储解决方案。
mongodb是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
bson示例:
{
name: "MongoDB",
type: "bson",
data: {
id: 1,
code: 123456
}
}
bson与json区别:
①更快的遍历速度
bson会把数据长度存于头部,方便检索
②操作更简易
修改某个数字,如从9变成10,数据长度发生了变化,所有的内容都要往后后移一位。bson则是可以指定数据列,修改的只是那一位数据列,但是如果数据由整型变成长整型,也是会导致数据变长的。
③增加了额外的数据类型
bson增加了byte array数据类型,不需要先转成base64在存成json。
分布式计算的优点:
可靠性(容错) :
分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。
可扩展性:
在分布式计算系统可以根据需要增加更多的机器。
资源共享:
共享数据是必不可少的应用,如银行,预订系统。
灵活性:
由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。
更快的速度:
分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度。
开放系统:
由于它是开放的系统,本地或者远程都可以访问到该服务。
更高的性能:
相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。
缺点:软件少,网络问题,安全性
什么是关系数据库
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
关系数据库:Oracle、DB2、MySQL、Microsoft SQL Server、Microsoft Access等
什么是非关系数据库
指非关系型的,分布式的,数据以键值对的形式存储,结构不固定。
严格意义上应该是一种数据结构化存储方法的集合
不足:只能存储简单的数据,不支持事物
二、mongodb的特点:
1、面向集合存储易存储对象类型的数据
2、模式自由
3、支持动态查询
4、支持完全索引等
三、mongodb数据模型
monogoDB可以建多个数据库,每个数据库都有自己的权限和集合,不同的数据库也放置在不同文件中。
一个MongoDB 实例可以包含一组数据库,一个DataBase 可以包含一组Collection(集合),一个集合可以包含一组Document(文档)。一个Document包含一组field(字段),每一个字段都是一个key/value pair。
key: 必须为字符串类型。
value:可以包含如下类型。
● 基本类型,例如,string,int,float,timestamp,binary 等类型。
● 一个document。
● 数组类型。
四、nodejs
nodejs是一个基于v8引擎的js运行环境,使用了事件驱动、非阻塞式 I/O 的模型,使其轻量又高效,V8 是为 Google Chrome 提供支持的 JavaScript 引擎的名称。 当使用 Chrome 进行浏览时,它负责处理并执行 JavaScript。
v8有c++语言编写,是可移植的,且可运行于 Mac、Windows、Linux 和其他一些系统
nodejs使用commonJs模块系统 浏览器使用es5模块标准
nodejs使用require() 浏览器使用import()
nodejs+mongodb使用
var mongoClient = require('mongodb').mongoClient;
var url = 'mongodb://localhost:27017/runoob'
mongoClient.connects(url, function() {
if (err) throw err;
var dbData = db.db('runoob');
// 创建集合
dbData.createCollection('site', function() {
db.close()// 关闭数据库
})
// 插入数据
var str = {name: "张三"};
dbData.collection('site').insertOne(str, function(err,data) {
db.close()
})
// 插入多条数据insertMany()
var str2 = {$set: { "url" : "https://www.abc.com" }};
// str为查询条件
dbData.collection('site').insertMany(str, str2, function(){
db.close()
})
// 查询数据find()
// 查询指定数据find({name: "张三"})
// 更新数据updateOne()
// 更新多条数据updateMany()
// 删除数据deleteOne()
// 删除多条数据deleteMany()
// 排序sort(type) type = {type: 1}升序 -1 降序
// 分页find().limit(2)
// 跳过find().skip(2)
})