【问Mongoose】我应该如何处理分页?
需求场景
作者和书籍列表
展示列表时如何处理分页
数据库如下
作者Author
// author
let authorSchema = new Schema({
name: {
type: String,
required: true,
index: true,
unique: true
}
})
module.exports = mongoose.model('Author', authorSchema)
书籍Book
// book
let bookSchema = new Schema({
author: {
type: Schema.Types.ObjectId,
ref: 'Author'
},
type: {
type: String,
default: ''
}
})
module.exports = mongoose.model('Book', bookSchema)
查询如下
// 获取列表-不分组
const getBooks = async (ctx, next) => {
let { size = 10, page = 1 } = ctx.query
let options = {
skip: Number((page - 1) * size),
limit: Number(size)
}
let res = await Book.find({}, null, options)
let total = await Book.countDocuments()
let data = {
list: res,
pagination: {
total,
page,
size
}
}
ctx.body = {
data,
code: 0
}
}
问题:如果我想得到某个作者的书籍列表,有什么好的解决办法么?
// 获取列表-如何分组
const getMyBooks = async (ctx, next) => {
let authorId = ctx.authorId
let { size = 10, page = 1 } = ctx.query
let options = {
skip: Number((page - 1) * size),
limit: Number(size)
}
let res = await Book.find({ author: authorId }, null, options)
// ???????????
let total = await Book.countDocuments() // 这个总数应该如何获取比较好?是按authorId查到全部的book,取数组length么?
let data = {
list: res,
pagination: {
total,
page,
size
}
}
ctx.body = {
data,
code: 0
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
countDocuments
也是可以筛选的参数传递下查询条件就ok了