Node.js学习(6)mongoDB

mongoDB的安装及基本使用

http://www.884358.com/mongodb-install-base/

Mongoose的使用

简介

Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。

安装

yarn add mongoose

使用

  • 1)引入Mongoose
var mongoose = require("mongoose");
  • 2)连接MongoDB数据库
mongoose.connect("mongodb://ip地址:端口号/数据库名");

mongoose的CRUD方法

  • -Create
模型对象.create(文档对象,回调函数)
模型对象.create(文档对象)
  • -Read
模型对象.find(查询条件[,投影])不管有没有数据,都返回一个数组
模型对象.findOne(查询条件[,投影])找到了返回一个对象,没找到返回null
  • -Update
模型对象.updateOne(查询条件,要更新的内容[,配置对象])
模型对象.updateMany(查询条件,要更新的内容[,配置对象])
备注:存在update方法,但是即将废弃,查询条件匹配到多个时,依然只修改一个,强烈建议用updateOne或updateMany
  • -Delete
模型对象.deleteOne(查询条件)
模型对象.deleteMany(查询条件)
备注:没有delete方法,会报错!

DEMO:

//1.引入mongoose
let mongoose = require('mongoose')
mongoose.set('useCreateIndex', true)

let dbPromise = new Promise((resolve, reject) => {
        //2.连接数据库
        mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true})
        //3.绑定监听
        mongoose.connection.once('open', (err) => {
            if (!err) {
                console.log('数据库连接成功')
                resolve()
            } else {
                console.log(err)
                reject(err)
            }
        })
    })

    /**
     * 第一种写法
     */
// dbPromise.then(()=>{
//     console.log('操作数据库')
// },(err)=>{
//     console.log(err)
// })

    /**
     * 第二种写法
     */
// dbPromise.then(()=>{
//     console.log('操作数据库')
// }).catch((err)=>{
//     console.log(err)
// })

    /**
     * 第三种写法
     */
;(async () => {
    await dbPromise
    //1.引入Schema
    let schema = mongoose.Schema
    //2.创建约束对象
    let stuSchema = new schema({
        stu_id: {
            type: String,
            required: true,  //必填
            unique: true    //唯一字段
        },
        name: {
            type: String,
            required: true,  //必填
        },
        age: {
            type: Number,
            required: true,  //必填
        },
        hobby: [String],
        info: schema.Types.Mixed, //接受所有数据类型
        created_at: {
            type: Date,
            default: Date.now()
        }
    })

    //3.创建一个模型对象
    let stuModel = mongoose.model('students', stuSchema)

    //4.数据的增删改查
    //增
    stuModel.create({
        stu_id: '2009211001',
        name: '张三',
        age: 25,
        hobby: ['听音乐','玩游戏'],
        info: '一个好学生'
    }, (err, data) => {
        if (!err) {
            console.log('插入数据成功', data)
        } else {
            console.log(err)
        }
    })

    //增
    //查询年龄为18的学生的姓名和年龄
    let findResult = stuModel.find({age: 18}, {name: 1, age: 1, _id: 0})
    console.log(await findResult)

    //改
    //将张三的年龄改为19
    let updateResult = stuModel.updateMany({name:'张三'}, {age: 19})
    console.log(await updateResult)

    //删
    //删除所有姓名为张三的学生,如果没有前面的await,也没有写回调函数,那么不执行
    await stuModel.deleteMany({name: '张三'})
})()

mongoose的模块化

test.js代码如下:

let db = require('./db')
let stuModel = require('./model/students')
let teacherModel = require('./model/teachers')

;(async () => {
    await db
    let student = stuModel.findOne({age: 18}, {name: 1, age: 1, _id: 0})
    console.log(await student)
    await teacherModel.create({
        teacher_id:'2009001',
        name:'张老师',
        age:20,
        hobby: ['做PPT'],
        info: '一个好老师'
    })
    console.log('创建老师成功')
    let teacher = teacherModel.findOne({}, {name: 1, age: 1, _id: 0})
    console.log(await teacher)
})()

db/index.js代码如下:

const PORT = 27017
const DBNAME = 'test'
//1.引入mongoose
let mongoose = require('mongoose')
mongoose.set('useCreateIndex', true)

module.exports = new Promise((resolve, reject) => {
    //2.连接数据库
    mongoose.connect(`mongodb://localhost:${PORT}/${DBNAME}`, {useNewUrlParser: true, useUnifiedTopology: true})
    //3.绑定监听
    mongoose.connection.once('open', (err) => {
        if (!err) {
            console.log('数据库连接成功')
            resolve()
        } else {
            console.log(err)
            reject(err)
        }
    })
})

model/studens.js代码如下:

let mongoose = require('mongoose')

//1.引入Schema
let schema = mongoose.Schema
//2.创建约束对象
let stuSchema = new schema({
    stu_id: {
        type: String,
        required: true,  //必填
        unique: true    //唯一字段
    },
    name: {
        type: String,
        required: true,  //必填
    },
    age: {
        type: Number,
        required: true,  //必填
    },
    hobby: [String],
    info: schema.Types.Mixed, //接受所有数据类型
    created_at: {
        type: Date,
        default: Date.now()
    }
})

//3.创建一个模型对象
module.exports = mongoose.model('students', stuSchema)

发表评论

邮箱地址不会被公开。 必填项已用*标注