为啥分页插件和跳过/限制在那个 mongodb 查询中不起作用?

Posted

技术标签:

【中文标题】为啥分页插件和跳过/限制在那个 mongodb 查询中不起作用?【英文标题】:Why paginate plugin and skip/limit don't work in that mongodb query?为什么分页插件和跳过/限制在那个 mongodb 查询中不起作用? 【发布时间】:2021-05-07 21:49:00 【问题描述】:
const paginateScheme = new Schema(

        posts: [  img: String, description: String, liked: String, postComId: String, comments: [  author: String, text: String  ]  ],
    , collection: "usersData");

paginateScheme.plugin(mongoosePaginate);
const myModel  = mongoose.model("sample", paginateScheme);


app.put("/api/pagination", function(req, res)

    const options = 
        page: 1,
        limit: 3,
        collation: 
            locale: 'en',
        ,
    ;

    const query = User.find(mail: 'user2@example.com', posts: 1 );


    myModel.paginate(  query , options, function (err, result) 
        if(err) return console.log(err);
        res.send(result);
    );
);

在哪里发布我想要分页的对象数组。 我检查了这个插件工作正常。当我使用 Model.find() 它通过外部对象分页没有任何问题。我尝试使用skip + limit,但它什么也没返回。

this query returns:

  docs: [  _id: 601a8f013d86dc237468467c, posts: [Array]  ],
  totalDocs: 1,
  limit: 3,
  totalPages: 1,
  page: 1,
  pagingCounter: 1,
  hasPrevPage: false,
  hasNextPage: false,
  prevPage: null,
  nextPage: null

【问题讨论】:

【参考方案1】:

您可以使用$slice 对这样的数组进行分页(使用 async/await)

let result = await myModel.find(mail: 'user2@example.com', posts: $slice: [0, 3])

【讨论】:

以上是关于为啥分页插件和跳过/限制在那个 mongodb 查询中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

在 GraphQL 查询中分组后如何限制和跳过标签列表页面的分页?

laravel 4 - 如何限制(采取和跳过)雄辩的 ORM?

MongoDB: 聚合框架

Mongodb聚合

mongodb 高级查询详解

mongodb - 聚合游标计数