koa mongoose 实践篇
Posted xhliang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了koa mongoose 实践篇相关的知识,希望对你有一定的参考价值。
https://www.cnblogs.com/xhliang/p/11913119.html 记录了一些理论知识,但是在实际开发过程中还存在很多疑惑,下面列举几个常用功能点;
1 倒叙,分页,总条数,模糊查询
router.get(‘/getList‘,async (ctx)=>{ const List = mongoose.model(‘List‘) // 创建一个查询条件 利用$and 由于$and不能为空数组,所以初始化时设置了个空对象 const queryCriteria = {$and:[{}]} const { myId ,title, type, currentPage, pageSize} = ctx.query if(myId){ queryCriteria.$and.push({myId:myId}) } if(type){ queryCriteria.$and.push({type:type}) } if(title){ // title 支持模糊查询 const regTitle = new RegExp(title,‘i‘) queryCriteria.$and.push({title:{$regex:regTitle}}) } // 查询总条数 const total = await List.countDocuments(queryCriteria) // 根据条件进行分页查询,limit控制返回的最大条数,skip控制第几页,sort用于排序(1正叙,-1倒叙) await List.find(queryCriteria).sort({time:-1}).limit(parseInt(pageSize)).skip((parseInt(currentPage)-1)*parseInt(pageSize)).then((res)=>{ ctx.body = { code:200, data:{ list:res, total:total } } }) })
2 关联查询,比如一个表中有aId bId id aId和bId都关联另外一个表,我想查询aId关联的表后再查询当前表之后返回内容;(没有找到更好的办法,如果有大神路过请指点)
实现法法:先根据条件进行关联查询,后再按条件查询都成功后返回给客户端数据;
3字段必填的设定,如更新和删除数据时经常需要id;(不知道有没有更好的办法,欢迎路过的给出较好的答案)
router.put(‘/updateList‘,async ctx=>{ const List= mongoose.model(‘List‘) const updateId = ctx.request.body._id // 更新时id必选 if(!updateId){ ctx.body={ code:405, message:"Id was not found" } }else{ await List.update({_id:updateId},{$set:ctx.request.body}).then(res=>{ ctx.body = { code:200, message:‘Update success‘ } }).catch(err=>{ console.log(err) ctx.body={ code:500, message:err } }) } })
4 字段唯一性,不能被重复;
字段唯一性的控制是在new Schema时 设置字段的属性{unique:true}
const listSchema = new Schema({ id:Schema.Types.ObjectId, name:{ type:String,unique:true }, type:String, desc:String, aId:String, bId:String, time: { type: Date, default: Date.now() }, })
以上是关于koa mongoose 实践篇的主要内容,如果未能解决你的问题,请参考以下文章