美文网首页
MongoDB 分页查询 antd table

MongoDB 分页查询 antd table

作者: 龚达耶 | 来源:发表于2019-08-04 00:27 被阅读0次

在mongoDB的分页查询中我们一般会使用到limit skip sort,在这里我们以mongoose为例前端采用antd的table组件来完成一个列子。

首先只有分页的话我们在table组件的paginition中需要传递给后台的是当前页数,每条页数


image.png
data :{
    limit: pagination.current,
    page :pagination.pageSize,
}

后台接收到后以mongoose为例子

Model.find({}, null, {
        limit,
        skip: (page-1)*limit,
        lean: true
})

但是在真实场景下我们也许还需要做一些sort或者filter的需求,在antd中实现如下图

image.png
image.png

当table 发生变化时我们有三个参数pagination, filters, sorter
我们直接把传递给后台

data :{
    limit: pagination.current,
    page :pagination.pageSize,
    sortField: sorter.field,
    sortOrder: sorter.order,
    filter: filters
}

注意点:

  • sortOrder传过来时会有'ascend' 'descend' false这三种但是mongoDB不支持ascend和descend所以我们需要切换
const sortOrder = sortOrder === 'ascend' ? 1 : 0;
  • 可能filter从前台传递过来的是多条数据所以我们需要改造下
    const newFilter={}
    console.log(filter) // { Environment: [ 'PreProd', 'Production' ] }
    if(filter){
        for (let val of Object.entries(filter)){
            console.log(val[1])
            if(val[1].length !== 0) {
                newFilter[val[0]] = {"$in": val[1]}
            }
        }
    }
    console.log(newFilter) // { Environment: { '$in': [ 'PreProd', 'Production' ] } }
  • sort也是以对象形式传递
    let sortObj = {}
    sortObj[sortField] = sortOrder

最终

Model.find(newFilter, null, {
        limit,
        skip: (page-1)*limit,
        lean: true,
        sort: sortObj
    })

相关文章

网友评论

      本文标题:MongoDB 分页查询 antd table

      本文链接:https://www.haomeiwen.com/subject/fyfedctx.html