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() },
})
原文:https://www.cnblogs.com/xhliang/p/13212806.html