[Node.js使用Mongoose操作MongoDB]

       在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();

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值