nodejs自学之旅(完结篇)—— 简单数据库操作增删改查、表关联and分页排序

    关于nodejs自学篇暂时不会再深入下去,学习的初衷也是为了搭建一个沟通前后端平台。本内容结束后会紧跟Vue.js的内容。

    年后的剩余时光,除了毕设,还要费点心思准备一下各种招聘什么的,有招聘就有笔试,很多基础的东西可能没有百度的提示都答不太具体了。最近文章质量有所下降,但还是想分享出来一些经验,算是一种个人的积累吧。


1.数据库的增删改查

增删改查算是数据库的四种基本操作,当然我不会去直接操作数据库(用select from .......之类的),这对于前端人员来说可能有些生疏,因此nodejs的mongodb模块提供了model对象供我们使用,之前的文章也有涉及,这里具体讲一下每种操作。

增:(增的操作比较特殊,需要new一个实例,其他操作均不需要,可以直接调用model底下的function进行操作)

new User({
    username:username,
    password:password,
    num:num,
}).save(); //该方法返回一个promise对象

删:remove({})参数为json对象,用于限定查找条件

User.remove({username:username}).then(function(){
        //清一下cookie
        req.cookies.set('userInfo',null);
        responseData.err_msg = "删除成功";
        res.json(responseData);
    })

改:update({},{})第一个参数限定查找范围,第二个参数用于更新内容

User.update({
                _id:_id
            },{
                username:newUserName,
                password:newPassword,
            })//返回promise对象

查:find/findOne({})限定查找范围

User.findOne({_id:{$ne:_id},username:newUserName}) //查找id不为_id,username为newUserName的人

2.分页排序

分页也是数据库经常用到的操作之一,年轻的时候用数据库还不知道分页是什么,每次都select * from,数据最终拿到前端去处理,结果后面数据多了調接口花个几秒,前端处理数据再花个几秒,用户体验极差。至于排序,基本是涉及到分页的最后都会用到排序。

/*
* 用户信息查询
* 方法:
* limit(num) 限制数据的条数
* skip(num) 忽略数据的条数
* sort(json) 排序
* 参数:
* ifAll true 所有人 一般给管理员 默认为false 取个人信息
* */
router.post('/user/getUserInfo',function(req,res,next){
    var reqdata = req.body;
    var pageNum = parseInt(reqdata.pageNum) || 5;
    var pages = parseInt(reqdata.page) || 0;
    var reqLimit = pageNum; //分页,每页条数
    var reqskip = pages *  pageNum;//跳过数据条数
    if(req.userInfo){
        User.count().then(function(count){
            //count参数为数据总条数,返回给前端,用于做分页插件
            //后端可以对page取值进行限定,前端也可以
            if(reqskip<0){
                reqskip = 0;
            }
            User.find().limit(reqLimit).skip(reqskip).sort({num:1}).then(function(userInfo){
                responseData.AlluserInfo = userInfo;
                responseData.totalCount = count;
                res.json(responseData);
            })
        })
    }
})

3.表关联

有一点数据库基础的(比如我)应该知道表里面有很多特殊的数据,比如主键、外键,主键只能有一个,而且是惟一的,外键则用来关联其他表。表关联基本也是这个意思,为了搞表关联,我还特地新建了个表。

schema如下:

var mongoose =  require('mongoose');

//该表仅用于测试关联字段(外键)的使用
module.exports = new mongoose.Schema({
    //名称+类型
    sex:{
        type:Number,
        defalt:1
    },
    realName:String,
    birthday:String,
    user:{
        type:mongoose.Schema.Types.ObjectId, //注意这里的type值不能乱写!!!!!!!!!
                                             // 你不能随意拿个比如string类型作为外键,会报错,我已经在违法的边缘试探过了
        ref:'User'
    }
})
model如下:
var mongoose =  require('mongoose');

//加载表结构
var usersSchema = require('../schemas/userDetail.js');
//创建模型,输出的对象提供了很多可以操作数据的方法
module.exports = mongoose.model('UserDetail',usersSchema);

populate()方法,参数是是关联字段

//用populate方法通过外键查询
router.post('/user/findUserDetail',function(req,res,next){
    UserDetail.find().populate('user').then(function(userdetail){
        responseData.userdetail=userdetail;
        res.json(responseData);
    })
})

结果:可以通过外键读取别的表的信息


猜你喜欢

转载自blog.csdn.net/dkr380205984/article/details/79304854