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 实践篇的主要内容,如果未能解决你的问题,请参考以下文章

koa1链接mongodb

你真的了解mongoose吗?

node+koa2+mongod构建项目及与express对比

KOA实战系列之MongoDB篇

无法使用 mongoose 连接到 mongodb 数据库

Koa nuxt最佳实践前篇