# MongoDB 快速入门

mongo

MongoDB 是非关系型数据库(NoSQL)。

核心概念:

Mysql MongoDB Mongoose
数据库实例 MongoDB实例 Mongoose
模式(schema) 数据库 Mongoose
表(table) 集合(collection) 模板(schema)/模型(Model)
行(row) 文档(document) 实例(instance)
Primary key Object(_id) Object(_id)
表字段 column Field Field

推荐一个图形化工具:robo3t

# 1、安装

在本教程中在 docker 安装,首先下载镜像。

docker pull mongo:4

安装 docker-mongose ,如果已经安装,不用重新安装,直接添加配置文件 docker-compose.yml

version: "3"
services:
  blog-db:       # 容器名字
    image: mongo # 镜像名:版本
    ports:
      - "10050:27017" # 外部端口:docker 端口
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin   # 用户名
      MONGO_INITDB_ROOT_PASSWORD: 123456  # 密码

启动

docker-compose up -d

# 2、基本操作

找到收据库安装目录,使用终端进入 bin 目录,使用以下命令,启动交互式命令窗口。

mongo

进入之后,我们查看数据库。

(1)查看

show bds

会显示以下三个数据库:

  • admin
  • local
  • config

这是查看数据库列表的命令,默认有三个数据库。每一个叫做一个数据库(database)。

(2)操作数据库

下面我们操作数据库,使用use 命令。

# 切换到 blog 数据库
use blog

如果没有这个数据库,会创建一个

到了一个重要的环节,那就是删除数据库,使用 use 命令,先切换到对应的数据库,适应以下命令:

db.dropDatabase()

(3)集合的操作

切换到数据库之后,创建集合。我们创建了 blog 的数据库,现在我们需要创建一个存放用户名和密码的一个集合。可能很抽象,举个例子:

# 这个就是一个集合
[
    {
        "name": "zhangsan",
        "psd": 1234
    },
    {
        "name": "lisi",
        "psd": 12345
    }
]

使用以下命令创建集合和删除集合的命令,下面是创建了一个 users 的集合,因为我们在 blog 数据库中操作的,所以 users 集合属于 blog 数据库。

# 创建名字为 users 的集合
db.createCollection("users")

# 删除 users 集合
db.users.drop()

# 查看集合
show collections

# 3. 数据库权限机制

开启权限机制之后,用户登录之后才可以读写数据。

(1)添加超级管理员

use admin
db.createUser({ 
 "user" : "admin",//用户名
 "pwd": "admin",//密码
 "roles" : [{ 
     role: "root", //身份
     db: "admin"//所属数据库
 }] 
}

# 4. 使用 Node.js 增删改查

安装数据库

npm i mongoose

快速开始

// 1. 加载模块
const mongoose = require('mongoose');

// 2. 连接数据库
mongoose.connect('mongodb://localhost:27017/test', {
    useNewUrlParser: true
});

// 3. 创建一个模型
//设计数据库
const Cat = mongoose.model('Cat', {
    name: String
});


// 3. 创建一个数据并保存
const miao = new Cat({
    name: '喵喵'
});

// 4. 持久化保存
kitty.save().then(() => console.log('保存成功过'));

下面是数据库增删改查的例子。

//  使用uses的数据了, 新增数据
var jack = new User({
    name: 'jack',
    password: '123456',
    email: "elgar@163.com"
})

// **************
// #save/ 保存数据
// **************
jack.save(function (err, ret) {
    if (err) {
        console.log("保存失败")
    } else {
        console.log("保存成功")
        console.log(ret)
    }
})

// **************
// #region/ 查询数据
// **************

User.find(function (err, ret) {
    if (err) {
        console.log("查询失败")
    } else {
        console.log("查询成功")
        console.log(ret)
    }
})

// #region/ 条件查询数据
User.find({
    username: "elgar"
}, function (err, ret) {
    if (err) {
        console.log("查询失败")
    } else {
        console.log("查询成功")
        console.log(ret)
    }
})

// **************
// Removing/删除数据
// **************
User.remove({
    username: 'jack' 
},function(err){
    if (err) {
        console.log("删除失败")
    } else {
        console.log("删除成功")
    }
})

// **************
// Updating/更新数据
// **************
User.findByIdAndUpdate('5e133352576f301ab06d0f5d', {
    password: '654123'
}, function (err) {
    if (err) {
        console.log("更新失败")
    } else {
        console.log("更新成功")
    }
})
更新时间: 12/30/2021, 9:57:33 AM