mongoose 学习笔记
2020-04-18 本文已影响0人
吐了节课蝰蛇
1. 安装mongoose
npm install mongoose --save
2.创建mongoose连接
在model文件夹中,创建db.js文件用于创建数据库的连接对象,然后将创建好的连接对象曝露出去。
// 引包
const mongoose = require("mongoose");
//连接数据库
// mongoose.connect("mongodb://localhost/mongooseDB");
var db=mongoose.createConnection("mongodb://localhost/mongooseDB");
db.once('open',function(callback){
console.log('数据库连接ok...');
})
//将创建连接的对象曝露出去
module.exports=db;
3. mongoose操作对象
Mongoose 里,一切都始于Schema,它可以看做是一种架构,每一个创建的架构(Schema)都会映射到MongoDB中collection,并且创建与Schema相同的结构的文档(数据)。
我们继续在model文件夹中创建一个student.js文件,用于搭建学生的架构(Schema),创建完成后我们使用db.model将这个架构映射成一个学生模型,最后将这个模型也导出。
//引包
var mongoose=require('mongoose');
var db=require('./db')
//创建一个学生架构
var studentSchema = mongoose.Schema({
name: {
type: String,
default: '匿名用户'
},
age: {
type: Number
},
sex: {
type: Boolean
}
})
//将学生架构映射成一个学生(Student)模型
var studentModel=db.model('Student',studentSchema);
//将学生模型曝露出去
module.exports=studentModel;
4. 创建实例并保存
创建一个app.js当做程序的入口文件,这里引用刚才导出的学生文件,获得一个学生的模型,然后创建这个模型对象,相当于实例化一个学生对象。
var student = require('./model/student')
//创建对象
var admin= new student({
name: 'admin',
age: 33,
sex: true
});
//保存
admin.save(function () {
console.log('ok');
})
//创建并保存另一个对象
student.create({
name: 'test',
age: 18,
sex: false
})
运行测试
npm app.js
查看数据库中获得两条数据
5. 添加几个静态方法
修改student.js文件,在其中添加几个静态方法,这相当于是直接在student架构(类型)中直接添加方法,使用时不需要实例化对象,直接通过student来调用。
//引包
var mongoose = require('mongoose');
var db = require('./db')
//创建一个学生架构
var studentSchema = mongoose.Schema({
name: {
type: String,
default: '匿名用户'
},
age: {
type: Number
},
sex: {
type: Boolean
}
})
//静态方法是直接将方法创建到架构中去,直接通过架构打点调用
//添加
studentSchema.statics.addStudent=function(name,age,sex,callback){
this.model('Student').create({name:name,age:age,sex:sex},callback);
}
//创建一个查找功能
studentSchema.statics.findByName = function (name, callback) {
this.model('Student').find({
name: name
}, callback);
};
//更新
studentSchema.statics.updateInfoByQuery = function (query, data, callback) {
this.model('Student').updateMany(query, data, callback);
}
//删除
studentSchema.statics.deleteByName = function (name, callback) {
this.model('Student').deleteMany({
name: name
}, callback);
}
//将学生架构映射成一个学生(Student)模型
var studentModel = db.model('Student', studentSchema);
//将学生模型曝露出去
module.exports = studentModel;
使用它们,各种测试CRUD
var student = require('./model/student')
// //创建对象
// var admin= new student({
// name: 'admin',
// age: 33,
// sex: true
// });
// //保存
// admin.save(function () {
// console.log('ok');
// })
// //创建并保存另一个对象
// student.create({
// name: 'test',
// age: 18,
// sex: false
// })
// //通过姓名查找
// student.findByName('admin', function (err, result) {
// if (err)
// console.log(err);
// else
// console.log(result);
// })
// //更新
// student.updateInfoByQuery({
// name: 'admin'
// }, {
// $set: {
// age: 19
// }
// }, function (err, result) {
// if (err)
// console.log(err);
// else
// console.log(result);
// })
// //删除
// student.deleteByName('admin',function(err,result){
// if (err)
// console.log(err);
// else
// console.log(result);
// })
// //添加
// student.addStudent('cc',66,true,function(err,result){
// if (err)
// console.log(err);
// else
// console.log(result);
// })
6. 总结一下
- 定义模型
var xxschema=mongoose.schema({}) - 静态方法
xxschema.statics.方法名=function(callback){
}
其中4种常用操作
- this.model('模型名称').create()
- this.model('模型名称').find()
- this.model('模型名称').updateMany()
- this.model('模型名称').deleteMany()
- 创造模型
db.model('模型名称',xxschema)