本篇文章是关于mongoose的简单操作,包括使用objectId来关联和一些增删查改的方法。希望能指出不正确的地方,因为我也是初学者。也希望能对其他初学者有帮助!谢谢!
node.js目录结构:
routes:路由分发
controller:mvc中C层,做逻辑处理
models:mvc中m层,数据表模型
DBsql:模型sql操作
DBhelper:公共sql方法
数据表结构
user:学生表
schoolClass:班级表
user_schoolClass:多对多中间表
逻辑过程:
(1)新建对应表模型及关联
(2)设计增删改查语句
(3)逻辑层使用模型去执行增删查改方法
(1)新建对应表模型及关联
user模型
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//schema 就是如何定义数据的结构
var userSchema = new mongoose.Schema({
userName:{type:String}
});
//生成方法getModel给予调用,返回user模型
module.exports = {
getModel: function(){
return _getModel();
}
};
//通过db将表user和Schema结构连接在一起,没有表的话会自动产生。
var _getModel = function(type,err){
var userModel = global.db.model('user',userSchema);
return userModel;
};
schoolClass模型
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var schoolClassSchema = new mongoose.Schema({
schoolClassName:{type:String}
});
module.exports = {
getModel: function(){
return _getModel();
}
};
var _getModel = function(){
var schoolClassModel = global.db.model('schoolClass',schoolClassSchema);
return schoolClassModel;
};
user_schoolClass模型
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var user_schoolClassSchema = new mongoose.Schema({
userId:{type: Schema.Types.ObjectId, ref: 'user' },//定义类型为objectid ,ref是关联的模型名称
schoolClassId:{type: Schema.Types.ObjectId, ref: 'schoolClass' }<span style="font-family: Arial, Helvetica, sans-serif;">//定义类型为objectid ,ref是关联的模型名称</span>
});
module.exports = {
getModel: function(){
return _getModel();
}
};
var _getModel = function(type,err){
var user_schoolClassModel = global.db.model('user_schoolClass',user_schoolClassSchema);
return user_schoolClassModel;
};
(2)设计增删改查语句dbHelper.js
/**
* 公共Add方法
* @param model 要操作数据库的模型
* @param conditions 增加的条件,如{id:xxx}
* @param callback 回调方法
*/
exports.addData =function(model,conditions,callback) {
model.create(conditions, function(err,result){
if(err) {
console.log(err);
callback({success:0,flag:"save data fail"});
} else {
console.log('save success');
callback({success:1,flag:"save data success"});
}
});
}
/**
* 公共update方法
* @param model 要操作数据库的模型
* @param conditions 增加的条件,如{id:xxx}
* @param update 更新条件{set{id:xxx}}
* @param options
* @param callback
*/
exports.updateData =function(model,conditions,update,options,callback) {
model.update(conditions, update, options, function(error,result){
if(error) {
console.log(error);
callback({success:0,flag:"update data fail"});
} else {
if(result.n!=0){
console.log('update success!');
callback({success:1,flag:"update data success"});
}
else{
console.log('update fail:no this data!');
callback({success:0, flag: 'update fail:no this data!'});
}
}
});
}
/**
* 公共remove方法
* @param model
* @param conditions
* @param callback
*/
exports.removeData =function(model,conditions,callback) {
model.remove(conditions, function(error,result) {
if (error) {
console.log(error);
callback({success: 0, flag: "remove data fail"});
} else {
if(result.result.n!=0){
console.log('remove success!');
callback(