【问Mongoose】我应该如何处理分页?

发布于 2022-09-11 23:32:17 字数 1616 浏览 17 评论 0

需求场景

作者和书籍列表
展示列表时如何处理分页

数据库如下

作者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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

渡你暖光 2022-09-18 23:32:17

countDocuments也是可以筛选的
参数传递下查询条件就ok了

let total = await Book.countDocuments({ author: authorId }) 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文