MongoDB与Nodejs实战

246 阅读3分钟

什么是MongoDB ?

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

MongoDB 概念解析

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

MongoDB云数据库

一、注册

image.png

二、配置云数据库
1.  选择数据库

选择最后一个免费的

image.png

2.  选择服务地区

随便选择一个

3.  添加数据库用户

用来确定数据库的访问权限(默认是读写权限

4.  添加IP地址

用来确定哪些IP可以访问到你的数据库

选择允许任意IP访问 0.0.0.0/0

image.png

5.  连接集群

1.  点击集群的connect按钮

2.  选择使用Compass可视化工具连接集群

3.  下载MongoDB Compass可视化工具

4.  复制链接uri

5.  打开MongoDB Compass,粘贴uri到输入框,修改uri里的用户名/密码第3步创建的用户名/密码

6.  点击MongoDB Compass界面connect按钮

image.png

image.png

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, {
  useNewUrlParsertrue,
  useUnifiedTopologytrue
})
//监听数据库连接状态
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({
  avatorString,
  nameString,
  ageNumber,
})

允许使用的 SchemaTypes 有:

类型说明
String字符串
Number数值
Date日期
Buffer二进制
Boolean布尔值
Mixed伪类型,用于声明参数的类型可以是任何类型
ObjectIdid
Array数组

Schema的功能主要是定义文档结构和属性类型

五、创建model

Model 是通过 Schema 编译来的构造函数。 它们的实例表示从数据库保存和读取的 documents。 从数据库创建和读取 document 的所有操作都是通过 model 进行的。

var UserModel = mongoose.model('user', userSchema)
1、增
var userModel = new UserModel(
  { age10, name'张三', avator'张' }
);
userModel.save()
  .then(handleSuccess)
  .catch(handleError)

// or

UserModel.create({ age10, name'张三', avator'张' })
  .then(handleSuccess)
  .catch(handleError)
2、删
UserModel.deleteOne({ _id'647d933ece619485a71b4594' })
  .then(handleSuccess)
  .catch(handleError)
3、改
UserModel.updateOne(
  { _id'647d933ece619485a71b4594' },
  { $set: { age10, 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)