06-mongoose入门、模型、默认参数 、mongoose模块化

3,213 阅读3分钟

1、mongoose 简介

Mongoose是 node.js 中对 mongodb 进行便捷操作的对象模型工具。Mongoose 是 NodeJS 的驱动,不能作为其他语言的驱动。

  • 通过关系型数据库的思想来设计非关系型数据库
  • 基于 mongodb 驱动,简化操作

2、mongoose的安装以及使用

官网:mongoosejs.com/

  1. 安装

    npm i   mongoose --save
    
  2. 引入模块

    const mongoose = require('mongoose');
    mongoose.connect('mongodb://127.0.0.1/cms');
    // 如果有账户密码需要采用下面的连接方式:
    // mongoose.connect('mongodb://cmsdmin:123456@127.0.0.1:27017/cms');
    
    
  3. 定义 Schema

  • 数据库中的 Schema,为数据库对象的集合。schema 是 mongoose 里会用到的一种数据模式,可以理解为表结构的定义;每个 schema会映射到 mongodb 中的一个 collection,它不具备操作数据库的能力。
    var UserSchema=mongoose.Schema({
        name: String,
        age:Number,
        status:'number' // 如果类型使用小写,则需要使用引号包裹
    })
    
  1. 创建数据模型
  • 定义好了 Schema,接下就是生成 Model。
  • model是由 schema生成的模型,可以对数据库的操作。
  • 注意:mongoose.model里面可以传入两个参数也可以传入三个参数
  • mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema)
  • mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数3:数据库集合名称)
  • 如果传入 2个参数的话:这个模型会和模型名称相同的复数的数据库建立连接
  • 如果传入 3个参数的话:模型默认操作第三个参数定义的集合名称
    var UserModel = mongoose.model('User', UserSchema);
    
  1. 查找数据
    User.find({}, function(err, docs) {
        if (err) {
            console.log(err);
            return;
        }
        console.log(docs);
    })
    
  2. 增加数据
    var user1 = new User({   //实例化模型传入增加的数据
        name:'gogery',
        age: 20,
        status:1
    })
    user1.save();
    
    
  3. 修改数据
    User.updateOne({
        name: 'gogery'
    },{
        name: '曹阳'
    },
    function(err, res) {
        if (err) {
            console.log(err);
            return;
        }
        console.log('成功')
    });
    
  4. 删除数据
    User.deleteOne({
        _id: '5b72ada84e284f0acc8d318a'
    },
    function(err) {
        if (err) {
            console.log(err);
            return;
        }
        console.log('成功');
    });
    
  5. 保存成功后查找所有数据
    var u = new User({
        name: 'lisi2222333',
        age: 20,
        status: true
    }) u.save(function(err, docs) {
        if (err) {
            console.log(err);
            return;
        }
    
        User.find({}, function(err, docs) {
            if (err) {
                console.log(err);
                return;
            }
            console.log(docs);
        })
    });
    

1、mongoose默认参数

在为模型定义 schema 的时候,可以为字段指定默认值,当指定默认值之后,如果在增加数据的时候,没有设置该字段,则会使用默认值进行填充。

var UserSchema = mongoose.Schema({
    name: {
        type: String,
        trim: true
    },
    age: Number,
    status: {
        type: Number,
        default: 1
    }
})

2、mongoose模块化

为了更好的管理代码,在使用 mongoose 的时候,一般我们会对其划分不同的目录进行代码的管理。

  • db.js 文件
const mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1/test', { useNewUrlParser: true , useUnifiedTopology: true});

module.exports = mongoose;
  • BlogModel 模型文件
var mongoose = require('../db/index.js');
var Schema = mongoose.Schema;

var blogSchema = new Schema({
    title:  String,
    author: String,
    body:   String,
    comments: [{ body: String, date: Date }],
    date: { type: Date, default: Date.now },
    hidden: {
        type: Boolean,
        default: false,
    },
},{timestamps: true});
var BlogModel =  mongoose.model('BlogModel', blogSchema, 'blogs');

module.exports = BlogModel

  • CommentModel 模型文件
var mongoose = require('../db/index.js');
var Schema = mongoose.Schema;

var CommentSchema = new Schema({
    title:  String,
    author: String,
    body:   String,
    blog_id: {
        type: Schema.Types.ObjectId,
        model: 'BlogModel'

    },
    date: { type: Date, default: Date.now }
},{timestamps: true});
var CommentModel =  mongoose.model('CommentModel', CommentSchema, 'comments');

module.exports = CommentModel

  • app.js 运用文件
var BlogModel = require('./model/BlogModel');
const mongoose = require('mongoose');


;( async () => {

    var b1 = new BlogModel(
        {
            title: '这个是第一篇博文系统',
            author: '李文',
            body: '这个是一篇文档信息!',
            comments: [{body: '评论内容', 'date': '2019-12-2 09:49:20'}],
        }
    )

    var s = await  b1.save();
    console.log(s);


} )();

  • app.js 关联查询
var BlogModel = require('./model/BlogModel.js')
var CommentModel = require('./model/CommentModel');
const util = require('util');
const mongoose = require('mongoose')

;(async () => {
  
    var data = await CommentModel.aggregate([

        {
            $lookup: {
                from: 'blogs',
                localField: 'blog_id',
                foreignField: '_id',
                as: 'blogInfo'
            }
        }]);
    console.log(data);
    console.log(util.inspect(data, true, 10, true));
    mongoose.disconnect();
})();
;