Mongoose

Mongoose


一、介绍
mongoose是mongoDB的一个对象模型工具,是基于node-mongodb-native开发的mongoDB的nodejs驱动,可以在异步的环境下执行。同时它也是针对mongoDB操作的一个对象模型库,封装了mongoDB对文档的一些增删改查等常用方法,让nodejs操作mongoDB数据库变得更加容易。

二、主要功能
作为MongoDB驱动,可以连接MongoDB数据库;
作为MongoDB的对象模型库,可以直接操作MongoDB文档;

三、安装
cnpm/npm install mongoose

四、连接(db.js)
let dbSetting = {
db: 'mongodb',
host: localhost,
port: '27017',
dbname:'test',
password:'123456',
username:'sa'
};

let mongoose = require('mongoose');
let dbStr = dbSetting.db+'://'+dbSetting.username+":"+dbSetting.password+"@"+dbSetting.host+':'+dbSetting.port+'/'+dbSetting.dbname;
let db = monoose.createConnection(dbStr); // connect() 和 createConnection()区别?

// 连接失败的回调函数
db.on('error', function (error) {
console.log('数据库连接失败:' + error);
});

// 连接成功的回调函数
db.on('open', function () {
console.log('数据库连接成功');
});

module.exports = db;

五、Schema
5.1 介绍
数据属性模型,传统意义上的表结构,相当于Java中实体类;
不能直接操作数据;
5.2 定义Schema(TestSchema.js)
let mongoose = require('mongoose');
let TestSchema = new mongoose.Schema({
name: String, // 或者 name: {type: String, default: 'zhuzongzhi'}
age: Number, // 或者 age: {type: Number, default: 0}
date: Date
});
module.exports = TestSchema; // Schema大驼峰命名

5.3 添加属性
TestSchema.add({
email: String,
education: String
});

5.4 追加方法(只限于在Model层使用)(使用async await 解决异步问题,不推荐回调)
TestSchema.methods.findTest = async function (params1 = {}, params2 = {}) {
try {
return await this.model('test').find(params1, params2);
} catch(e) {
throw new Error('TestSchema.methods.findTest error:' + e);
}
};

5.5 静态方法/公共方法(未验证)
TestSchema.method('say', function () {}); // 可以在Model层和Entity实例层使用
TestSchema.static('say', function () {}); // 仅限于在Model层使用

六、Model
6.1 介绍
Schema构造生成的模型,具有操作数据库的能力;
6.2 Schema生成Model(TestModel.js)
let db = require('./db.js');
let TestSchema = require('./TestSchema.js');
let TestModel = db.model('test', TestSchema, 'test'); // 'test'为数据库中集合的名称
module.exports = TestModel;

七、Entity
7.1 介绍
Model创建实体Entity,Model和Entity都可以操作数据库,Model比Entity更具操作性;
7.2 Model创建Entity(以保存文档为例)
// 操作Entity
let TestModel = require('./TestModel.js');
let doc = {
name: 'zzz',
age: 25,
date: new Date()
};
let TestEntity = new TestModel(doc);
await TestEntity.save();

// 直接操作Model
let TestModel = require('./TestModel.js');
let doc = {
name: 'zzz',
age: 25,
date: new Date()
};
await TestModel.create(doc);


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值