在Node.js中使用mongoose模块操mongodb是很简单的事情,mongoose提供了一套丰富的api来操作mongodb。
1 定义MongoDB的Schema结构
//获取mongodb组件
var mongoose = require('mongoose');
/**
* 表结构定义
* */
var schema = new mongoose.Schema({
uid: String, //用户ID
user_name: String, //用户名称
password: String, //登录密码
real_name: String, //真实姓名
phone: String, //电话号码
email: String, //电子邮箱
group_id: Number, //用户所属分组ID
status: Number, //用户状态 0:注销,1:有效,2:超级管理员
comment: String, //备注信息
insert_time: Date, //添加时间
update_time: Date //更新时间
});
mongoose.model('User', schema);
2 连接MongoDB
2.1 定义MongoDB的连接配置
/**
* mongodb数据库连接配置信息
* */
module.exports = {
mongodb: "mongodb://192.168.1.100:20001/test-db",
logLevel: 'INFO',
}
2.2 MongoDB连接和初始化表的Schema结构
//导入mongodb连接配置
var config = require("../../../config/appConfig.js");
//导出mongodb连接
var mongoose = require("mongoose");
/**
* 创建mongodb数据库连接对象
* */
module.exports = function () {
var mongodb = mongoose.connect(config.mongodb, {useNewUrlParser: true});
mongodb.on("error", function (err) {
console.error("mongodb connected failed,message:" + err.message, err);
});
//用户信息Schema结构
require("../model/userModel.js");
//权限信息Schema结构
require("../model/permissionModel.js");
//用户分组信息Schema结构
require("../model/userGroupModel.js");
//用户权限关联信息Model
require("../model/permissionRelationModel.js");
return mongodb;
};
3 查询一条记录
/**
* 根据用户名匹配用户信息
* */
exports.findUserByName = async function (userName, callback) {
let err = null, doc = null;
try {
doc = await User.findOne({user_name: userName});
}
catch (e) {
err = e;
log.error("find user by name error,message:" + err.message, e);
}
callback(err, doc);
};
4 新增记录
/**
* 新增用户
* */
exports.addUser = async function (jsonParam, callback) {
var uid = "U" + utilTool.generateUid();
var user = new User();
user.uid = uid;
user.user_name = jsonParam.user_name;
user.password = jsonParam.password;
user.real_name = jsonParam.real_name;
user.phone = jsonParam.phone;
user.email = jsonParam.email;
user.group_id = jsonParam.group_id;
user.comment = jsonParam.comment;
user.status = 1;
user.insert_time = new Date();
let err = null, doc = null;
try {
doc = await User.create(user);
if (doc != null) {
//修改用户组成员信息
await UserGroupDao.updateGroupMember(jsonParam.group_id, uid, function (err, group) {
if (err) {
log.error("update user group member on add user error,groupId=" + jsonParam.group_id + ",error:" + err.message, err);
}
});
}
}
catch (e) {
err = e;
log.error("create user error,message:" + err.message, e);
}
callback(err, null);
};
5 更新记录
/**
* 更新用户信息
* */
exports.updateUser = async function (jsonParam, callback) {
let err = null, doc = null;
try {
doc = await User.findOne({uid: jsonParam.uid});
if (doc == null) {
log.error("user is not exist on edit,username:" + jsonParam.user_name);
callback(err, doc);
}
else {
var oldGroup = doc.group_id;
doc.user_name = jsonParam.user_name;
doc.password = jsonParam.password;
doc.real_name = jsonParam.real_name;
doc.phone = jsonParam.phone;
doc.email = jsonParam.email;
doc.group_id = jsonParam.group_id;
doc.status = jsonParam.status;
doc.comment = jsonParam.comment;
doc.update_time = new Date();
await User.update({uid: jsonParam.uid}, {$set: doc});
//修改用户组成员信息
await UserGroupDao.updateGroupMemberOnEdit(jsonParam.group_id, oldGroup, jsonParam.uid, function (err, doc) {
if (err) {
log.error("update user group member on edit user error,groupId=" + jsonParam.group_id + ",error:" + err.message, err);
}
});
}
}
catch (e) {
err = e;
log.error("edit user error,message:" + err.message, e);
}
callback(err, doc);
};
6 删除记录
/**
* 删除用户
* */
exports.delUser = async function (groupId, uid, callback) {
let err = null;
try {
await User.remove({uid: uid});
//删除用户分组成员信息
await UserGroupDao.deleteGroupMember(groupId, uid, function (err) {
if (err) {
log.error("delete user group member on delete user error,groupId=" + groupId + ",error:" + err.message, err);
}
});
}
catch (e) {
log.error("del user error,message:" + err.message, e);
}
callback(err);
};
7 分页查询
/**
* 计划任务信息查询
* @param queryParam:查询参数json对象
* @param callback:回调函数
* */
exports.listTasks = async function (queryParam, callback) {
var condition = {};
if (UtilTool.isNullOrEmpty(queryParam.task_id) === false) {
condition.task_id = queryParam.task_id;
}
if (UtilTool.isNullOrEmpty(queryParam.name) === false) {
condition.name = eval('/' + queryParam.name + '/');
}
if (UtilTool.isNullOrEmpty(queryParam.plan_type) === false) {
if (queryParam.plan_type != "0") {
condition.plan_type = queryParam.plan_type;
}
}
let err = null, docs = null, count = 0;
try {
count = await TaskScheduler.count(condition);
if (count > 0) {
docs = await TaskScheduler.find(condition)
.skip((queryParam.pageNo - 1) * queryParam.pageSize)
.limit(queryParam.pageSize)
.sort({insert_time: -1})
.exec();
}
}
catch (e) {
err = e;
log.error("query tasks error,message:" + err.message, e);
}
callback(err, docs, count);
};
8 数据排序
Mongoose对查询结果进行排序,使用sort({field:-1})进行排序,其中{field:-1}表示降序排序,{field:1}表示升序排序。如:
Permission.find({'system_code': systemcode}).sort({'type': 1, 'sort': 1}).exec();