您的位置:首页 > 数据库

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

2018-02-10 15:02 357 查看
    关于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);
})
})结果:可以通过外键读取别的表的信息

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐