什么是MongoDB ?
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB 概念解析
| SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
|---|---|---|
| database | database | 数据库 |
| table | collection | 数据库表/集合 |
| row | document | 数据记录行/文档 |
| column | field | 数据字段/域 |
| index | index | 索引 |
| table joins | 表连接,MongoDB不支持 | |
| primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
MongoDB云数据库
一、注册
二、配置云数据库
1. 选择数据库
选择最后一个免费的
2. 选择服务地区
随便选择一个
3. 添加数据库用户
用来确定数据库的
访问权限(默认是读写权限)
4. 添加IP地址
用来确定哪些IP可以访问到你的数据库
选择允许任意IP访问
0.0.0.0/0
5. 连接集群
1. 点击集群的connect按钮
2. 选择使用Compass可视化工具连接集群
3. 下载MongoDB Compass可视化工具
4. 复制链接uri
5. 打开MongoDB Compass,粘贴uri到输入框,修改uri里的用户名/密码为第3步创建的用户名/密码
6. 点击MongoDB Compass界面connect按钮
MongoDB在nodejs上的使用
一、创建Express项目
// Node.js 8.2.0 及更高版本
$ npx express-generator
二、安装mongoose依赖
需要注意安装版本,7.0.0及以上为新版本,一些api与旧版本有区别
$ npm i mongoose
三、连接MondoDB数据库
var mongoose = require('mongoose')
var uri = 'mongodb+srv://username:password@cluster0.xxxxxx.mongodb.net/demoDB'
mongoose.connect(uri, {
useNewUrlParser: true,
useUnifiedTopology: true
})
//监听数据库连接状态
mongoose.connection.once('open',()=>{
console.log('数据库连接成功……')
})
mongoose.connection.once('close',()=>{
console.log('数据库断开……')
})
四、定义schema
Mongoose 的一切始于 Schema。每个 schema 都会映射到一个 MongoDB collection ,并定义这个collection里的文档的构成。
var mongoose = require('mongoose')
var Schema = mongoose.Schema
// 创建用户Schema对象
var userSchema = new Schema({
avator: String,
name: String,
age: Number,
})
允许使用的 SchemaTypes 有:
| 类型 | 说明 |
|---|---|
| String | 字符串 |
| Number | 数值 |
| Date | 日期 |
| Buffer | 二进制 |
| Boolean | 布尔值 |
| Mixed | 伪类型,用于声明参数的类型可以是任何类型 |
| ObjectId | id |
| Array | 数组 |
Schema的功能主要是定义文档结构和属性类型
五、创建model
Model 是通过 Schema 编译来的构造函数。 它们的实例表示从数据库保存和读取的 documents。 从数据库创建和读取 document 的所有操作都是通过 model 进行的。
var UserModel = mongoose.model('user', userSchema)
1、增
var userModel = new UserModel(
{ age: 10, name: '张三', avator: '张' }
);
userModel.save()
.then(handleSuccess)
.catch(handleError)
// or
UserModel.create({ age: 10, name: '张三', avator: '张' })
.then(handleSuccess)
.catch(handleError)
2、删
UserModel.deleteOne({ _id: '647d933ece619485a71b4594' })
.then(handleSuccess)
.catch(handleError)
3、改
UserModel.updateOne(
{ _id: '647d933ece619485a71b4594' },
{ $set: { age: 10, name: '张三', avator: '张' } },
)
.then(handleSuccess)
.catch(handleError)
4、查
UserModel.find({age: {$gte: 10, $lte: 20}})
.then(handleSuccess)
.catch(handleError)
// or
UserModel.where('age').gte(10).lte(20).exec()
.then(handleSuccess)
.catch(handleError)