Schema不仅定义了文档结构和使用性能,可以为后面的Model和Entity提供公共的属性和方法。
Schema、Model、Entity的关系:
Schema : 可以定义字段类型,不具备数据库的操作能力
Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
Entity : 由Model创建的实体,他的操作也会影响数据库
Schema生成Model,Model创造Entity,Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性
基本使用:
/*****数据库连接*****/ //引入mongoose模块 var mongoose = require('mongoose'); //创建数据库连接 mongoose.connect('mongodb://localhost/test'); /*****Schema使用*****/ //定义kitty属性 var kittySchema = mongoose.Schema({ name: String }); //将该Schema发布为Model,第一个参数为集合名 var kittyModel = mongoose.model('kitty', kittySchema); //用module创建kitty实体 var kittyEntity = new kittyModel({ name: 'tinyphp' }); console.log(kittyEntity.name); //打印实体名字 /************/
还可以为添加方法,看红色部分:
/*****Schema使用*****/ //定义kitty属性 var kittySchema = mongoose.Schema({ name: String }); //为Schema创建方法 kittySchema.methods.speak=function(){ console.log('我的名字叫'+this.name); } //将该Schema发布为Model,第一个参数为集合名 var kittyModel = mongoose.model('kitty', kittySchema); //用module创建kitty实体 var kittyEntity = new kittyModel({ name: 'tinyphp' }); //console.log(kittyEntity.name); //打印实体名字 kittyEntity.speak(); /************/
添加以下可以保存数据到数据库
//执行完成后,数据库就有该数据了 kittyEntity.save();
需要注意的是,集合的名字会变成复数,如上:kitty->kitties
下面将分别实现插入、查询、删除、修改,建议先插入多条数据,以便测试噢~
module.js
/*****数据库连接*****/ //引入mongoose模块 var mongoose = require('mongoose'); //创建数据库连接 mongoose.connect('mongodb://localhost/test'); /*****Schema使用*****/ //定义kitty属性 var kittySchema = mongoose.Schema({ name: String }); //将该Schema发布为Model,第一个参数为集合名 mongoose.model('kitty', kittySchema);
插入 insert.js
var mongoose = require('mongoose'); require('./module.js'); //不传Schema时,返回kitty 的model,而此model在module已经发布了 var kittyModel = mongoose.model('kitty'); //创建实体 var kittyEntity = new kittyModel({ name: 'Mei' }); //保存数据 kittyEntity.save(function(err){ console.log('save status:',err? 'fail':'success'); });
查询所有 find.js
var mongoose = require('mongoose'); require('./module.js'); var kittyModel = mongoose.model('kitty'); //查询 kittyModel.find({},function(err,docs){ if(err){ console.log('err:',err); return; } console.log('result:',docs); });
模糊查询参考
var name='x';
.......find({name: new RegExp("^.*"+name+".*$")} ...........
多条件查询 condition.js
var mongoose = require('mongoose'); require('./module.js'); var kittyModel = mongoose.model('kitty'); //多条件查询$or、$and等 var cond = { $or:[ {name:'Mei2'} ] } kittyModel.find(cond,function(err,doc){ if(err){ console.log('find by cond err:',err); return; } console.log('cond:',cond,'result:',doc); });
查询某条记录findOne.js
var mongoose = require('mongoose'); require('./module.js'); var kittyModel = mongoose.model('kitty'); //查询一条 kittyModel.findOne({"name":"Mei"},function(err,doc){ if(err){ console.log('err:',err);return; } console.log('findOne result:',doc); });
删除 remove.js
var mongoose = require('mongoose'); require('./module.js'); var kittyModel = mongoose.model('kitty'); //先找出来然后删除 kittyModel.findOne({"name":"Mei"},function(err,doc){ if(err){ console.log('err:',err); return; } if(doc){ doc.remove(); console.log('删除了'); } });
删除多条:
var mongoose = require('mongoose'); require('./module.js'); var kittyModel = mongoose.model('kitty'); //先找出来然后删除 kittyModel.find({"name":"tinyphp"},function(err,docs){ if(err){ console.log('err:',err); return; } for(var i=0;i<docs.length;i++){ docs[i].remove(); console.log('deleteId:'+i); } });
修改updateOne.js
var mongoose = require('mongoose'); require('./module.js'); var kittyModel = mongoose.model('kitty'); //修改一条 kittyModel.findOne({"name":"Tom"},function(err,doc){ if(err){ console.log('err:',err); return; } doc.name='tinyphp'; doc.save(); console.log('update result:',doc); });
分别执行node insert.js ....等就可以看到效果了,图片好占位置,自己对比就好,最最值得注意的是先打开mongoDB的服务,不然也是徒劳。
全部实例下载: