1、mongoose 简介
Mongoose是 node.js 中对 mongodb 进行便捷操作的对象模型工具。Mongoose 是 NodeJS 的驱动,不能作为其他语言的驱动。
- 通过关系型数据库的思想来设计非关系型数据库
- 基于 mongodb 驱动,简化操作
2、mongoose的安装以及使用
-
安装
npm i mongoose --save
-
引入模块
const mongoose = require('mongoose'); mongoose.connect('mongodb://127.0.0.1/cms'); // 如果有账户密码需要采用下面的连接方式: // mongoose.connect('mongodb://cmsdmin:123456@127.0.0.1:27017/cms');
-
定义 Schema
- 数据库中的 Schema,为数据库对象的集合。schema 是 mongoose 里会用到的一种数据模式,可以理解为表结构的定义;每个 schema会映射到 mongodb 中的一个 collection,它不具备操作数据库的能力。
var UserSchema=mongoose.Schema({ name: String, age:Number, status:'number' // 如果类型使用小写,则需要使用引号包裹 })
- 创建数据模型
- 定义好了 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);
- 查找数据
User.find({}, function(err, docs) { if (err) { console.log(err); return; } console.log(docs); })
- 增加数据
var user1 = new User({ //实例化模型传入增加的数据 name:'gogery', age: 20, status:1 }) user1.save();
- 修改数据
User.updateOne({ name: 'gogery' },{ name: '曹阳' }, function(err, res) { if (err) { console.log(err); return; } console.log('成功') });
- 删除数据
User.deleteOne({ _id: '5b72ada84e284f0acc8d318a' }, function(err) { if (err) { console.log(err); return; } console.log('成功'); });
- 保存成功后查找所有数据
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();
})();
;