# MongoDB使用

MongoDB是非关系型数据库,对于前端来说相比较其他数据库使用起来更简单容易上手。

参考链接:

mongodb中文手册 (opens new window)mongodb官网 (opens new window)

# 一、数据库启动

1、安装

下载MongoDB (opens new window)选择合适的版本下载,下载过程可能有点慢,等待下载好选择非C盘目录点击安装,然后会有选择安装选项,我们选择custom自定义安装,目录我们在非C盘下创建一个mongodb文件作为安装目录,然后点击下一步,最后一步不要勾选 install MongoDB compass。

2、配置环境变量

找到你的安装目录到bin,然后复制地址D:\mongodb\bin,打开控制面板>高级系统设置>环境变量配置>找到Path编辑>新建>添加复制地址

3、指定数据库存放目录

mongodb默认使用执行 mongod 命令所处盘根目录下的  data/db 作为自己的数据存储目录

,所以在第一次执行 mongod 命令前先手动创建一个 data/db 文件,在 D:\mongodb\ 文件夹中创建一个 data 文件夹,再在 data 文件夹中创建 db 文件夹,在命令行执行:

mongod --dbpath D:/mongodb/data/db

4、mongodb服务命令

以管理员身份打开powershell终端,运行下面命令即可开启和关闭mongodb服务。执行启动命令后在浏览器可以打开 http://localhost:27017/ (opens new window)地址就表明运行成功。其实上面在指定数据库存放目录后就自动启动服务了。

# 启动 MongoDB
net start MongoDB


# 停止 MongoDB
net stop MongoDB

只有启动了mongodb服务后,在本地连接localhost服务器才能让项目正常启动,服务是无法连接访问的。

如果运行mongo命令提示无效,则需要借助mongodb提供的shell工具运行才行,下载mongoshell (opens new window) 点击安装。然后把安装目录也添加到系统环境变量去,然后运行命令:mongosh。

# 二、在服务器上安装

参考链接:在 Ubuntu 上安装 MongoDB (opens new window)

# 三、使用云存储

如果不想使用本地MongoDB,还可以直接使用MongoDB的云存储,不用下载软件和启动本地MongoDB,只要在线上注册账号和创建云存储进行连接就可以了。

1、注册并登录mongodb云存储 (opens new window)控制台,点击 Create cluster 按钮创建服务集群,选择免费版本点击创建。

图片 然后点击左侧菜单栏Clusters等1~3分钟等待服务创建好,创建好后入下图出现。

图片 图片 然后点击Connect按钮进行生成服务器连接链接,弹窗选择自定义应用

图片 第一次创建链接下面会有提示创建新账户进行连接用,我们点击创建。创建好后复制该地址去代码中进行连接mongodb服务器地址就可以了,db-password改成自己创建的账号密码就行了。

图片 如果已创建用户可以到项目中去设置用户

图片 图片

参考链接:express+mongoose 搭建数据接口 (opens new window)

# 四、数据库使用

数据库安装启动好后就可以进行连接了,这里借助mongoose插件进行连接和操作数据库。

参考链接:mongoose文档 (opens new window)

// user.js


// 引入mongoose包
var mongoose = require('mongoose');


// 1、连接数据库
// test数据库不需要存在,当插入第一条时会自动创建
mongoose.connect('mongodb://localhost/test');
// 或者连接云存储
mongoose.connect('mongodb+srv://xingchen:密码@mongotest.3kbmj.mongodb.net/?retryWrites=true&w=majority&appName=mongotest')


// 监听连接
const db = mongoose.connection


// 检查是否连接成功
db.on('error', function (error) {
  console.log('数据库连接失败:' + error)
})
db.on('open', function (error) {
  console.log('数据库连接成功')
})


// 2、设计表结构
// 通过mongoose.Schema设计一个名为userSchema的表
var userSchema = new mongoose.Schema({
  id: {
    type: String,
    required: true
  },
  // 约束
  username: {
    type: String,
    required: true
  },
  created_time: {
    type: Date,
    default: Date.now
  },
  status: {
    type: Number,
    // 0 没有权限限制
    // 1 不可以评论
    // 2 不可以登录
    enum: [0, 1, 2],
    default: 0
  }
});


// 3、将文档发布为模型
/*
    mongoose.model 方法就是用来将一个架构发布为模型
    第一个参数:传入大写名词单词字符串用来表示数据库名称
               mongoose会自动将大写单词转化成小写负数的集合名称
               例如: User最终会变为users集合
    第二个参数:架构 Schema
    返回值:模型构造函数
*/ 
// 发布模型
var User = mongoose.model('User', userSchema);


// 4、操作表


// 添加用户
// 获取传入参数,根据User集合创建一个数据
var admin = new User({
  id: 'xxx',
  username: 'sss111'
})
// 保存到数据库
admin.save().then(function(data, err) {
  if (err) {
    console.log('保存失败')
  } else {
    console.log('保存成功')
  }
})


/*
  查找数据
  User.find
  User.findOne
    第一个参数:按条件查询
    不加第一个参数查询所有
*/ 
// 从数据库中查找数据
User.find().then(function(data, err) {
  if (err) {
    console.log('查询失败')
  } else {
    console.log('查询成功')
  }
})


/*
  删除数据
  User.deleteMany
  User.deleteOne
    第一个参数:按条件删除
    不加第一个参数删除所有
*/ 
User.deleteOne({
  id: '5e68537d2f9bc50fa0ab343c'
}).then(function(data, err) {
  if (err) {
    console.log('删除失败')
  } else {
    console.log('删除成功')
  }
})


/*
  更新数据
  User.findByIdAndUpdate
    第一个参数:根据id更新数据
    第二个参数:更新的对象
*/
User.findByIdAndUpdate('5e68537d2f9bc50fa0ab343c', {
  username: 'sss111'
}).then(function(data, err) {
  if (err) {
    console.log('更新失败')
  } else {
    console.log('更新成功')
  }
})

# 五、基础命令

这些命令在服务器上可以运行,在本地运行可能会报错

查看显示所有数据库:

show dbs

查看当前操作的数据库:

db

切换到指定数据库:

use 数据库名