-
个人入门学习用笔记、不过多作为参考依据。如有错误欢迎斧正
-
目录
- 简介
- 安装
- Schema
- Schema嵌套
- 官网示例
- 真·MVC方式操作数据库(增、改demo)
- 索引
- 查找
- 追加
- 删除
-
简介
- Mongoose可以在node中、通过MVC操作对象的方式操作数据库。
- 无需各种原生命令
- 官方文档
-
安装
npm install --save mongoose
-
Schema
- 赋予了mongo行、列的概念
String
Number
Date
Buffer
Boolean
Mixed
ObjectId
Array
-
Schema嵌套
childSchema也可以添加各种方法 var childSchema = new Schema({ name: 'string' }); var parentSchema = new Schema({ // Array of subdocuments children: [childSchema], // Single nested subdocuments. Caveat: single nested subdocs only work // in mongoose >= 4.2.0 child: childSchema });
-
官网示例
/** * Created by kiritoSong on 17/9/22. */ const mongoose = require('mongoose'); //链接数据库 mongoose.connect ('mongodb://localhost:27017/MongooseDemo'); //创建一个模型。声明模型的名字、以及类型 //模型 ==》 表/集合 var Cat = mongoose.model('Cat',{name:String,age:String}); //创建一个模型。声明模型的名字。属性类型 //模型 ==》 表/集合 、属性 ==》表中元素类型 var kitty = new Cat({name:'cat1',age:'12'}); //调用实例save方法; // save ==》插入操作 kitty.save(function (err) { if (err) console.log(err); console.log('kitty__save'); }); //插入第二条 var tom = new Cat({name:'cat3'}); tom.save(fu> nction (err) { console.log('tom__save') });
-
真·MVC方式操作数据库(增、改demo)
app.js(controller操作)
/** * Created by kiritoSong on 17/9/22. */ //Schema 配置文件(表内元素格式文件); var Student = require('./models/Student.js'); /**使用'实例对象'保存数据**/ //实例化一个Student(表内元素)类 var xiaoming = new Student({'name':'小明','age':12,'sex':'男'}); //将这个元素存储(插入)进表中 xiaoming.save(function () { console.log('小明存储成功'); }); /**使用'类'保存数据**/ /*注意只能保存指定规则的key&V*/ 'qita':'其他'--是无法插入的 Student.create({'name':'小红','age':13,'sex':'女','qita':'其他'},(err) => { console.log('小红存储成功'); }); //使用实例方法查找与小明相同名字的人 xiaoming.findSimilarName((err,result) => { console.log('xiaoming'+result); }); //各种静态方法 // 查找 Student.findByName('小明',(err,result) => { console.log(result); }); Student.findAllStudent((err,result) => { console.log(result); }); //注意这里multi: true不能写成multi: 1 Student.xiugai({'name':'小明'},{$set:{'age':12}},{ multi: true },function (err) { if (err){ console.log(err) }else { console.log('update ok!'); } }); Student.finds({'name':'小明'},(err,result) => { console.log(result); });
db.js(model---数据库操作---链接、开启、监听等)
/** * Created by kiritoSong on 17/9/22. */ const mongoose = require('mongoose'); //链接数据库(每个用户链接时、都会创建一次连接请求。并不止链接一次) var db = m>> ongoose.createConnection('mongodb://localhost:27017/MongooseDemo'); //一句顶两句 // mongoose.connect ('mongodb://localhost:27017/MongooseDemo'); // var db = mongoose.connection; //可以监听一些数据库事件 db.once('open',function (callback) { console.log('数据库成功连接'); }); //将连接好的数据库对象暴露出去 module.exports = db;
Student.js(model---业务操作)
/** * Created by kiritoSong on 17/9/22. */ const mongoose = require('mongoose'); //获得数据库对象 const db = require('./db.js'); //创建一个学生的Schema(表内结构) var studentSchema = new mongoose.Schema({ name :{type:String,default:'匿名用户'}, age :{type:Number}, sex :{type:String} }); //使用methods为实例对象添加方法 //查找与对象相同名字的人 studentSchema.methods.findSimilarName = function (callback) { return this.model('Student').find({name:this.name},callback); }; //使用statics为对象添加方法 studentSchema.statics.finds = function (conditions,callBack) { this.find(conditions,callBack); }; studentSchema.statics.findByName = function(name,callBack){ this.find({name:name},callBack); }; studentSchema.statics.findAllStudent = function(callBack){ this.find({},callBack); }; studentSchema.statics.xiugai = function(conditions,update,options,callBack){ console.log(options); this.update(conditions,update,options,callBack); }; //通过studentSchema(内含数据结构、各种方法)。创建一个学生(表)模型 var studentModel = db.model('Student',studentSchema); //将模块以结构函数向外暴露 module.exports = studentModel;
-
索引
一级索引
ASchema.index({name:1,type:-1});//schema level
二级索引
var ASchema = new Schema ({ name:String, type:String, tags:{type:[String],index:true}//field level })
-
查找
find&&findOne
- 查找出来的是实例对象的数组、可以直接调用方法
studentSchema.methods.findSimilarName = function (callback) { return this.model('Student').find({name:this.name},callback); }; studentSchema.statics.findByName = function(name,callBack){ this.find({name:name},callBack); }; //例如 Student.findByName('小明',(err,result) => { result[0].findSimilarName((err,allxiaoming) => { console.log(allxiaoming); }); });
-
追加
this.comments.push(obj) this.save();
-
删除
studentSchema.statics.removeByName = function(name,callBack){ this.remove({name:name},callBack); };