如何使用 mongoose 从 mongoDB 中获取一定数量的对象? (Node.js)

Posted

技术标签:

【中文标题】如何使用 mongoose 从 mongoDB 中获取一定数量的对象? (Node.js)【英文标题】:How to fetch certain quantity of objects from mongoDB with mongoose? (Node.js) 【发布时间】:2019-12-08 12:03:21 【问题描述】:

我有一个 MongoDB 数据库和一个 React 网页,它使用对我的 Node.js 服务器的 http 请求显示内容。这个 Node.js 使用 mongoose 与数据库通信。 react 网页每页最多显示 10 个条目,当数据库变大时速度很慢:

React web page

Node.js 在做什么:

router.get("/", async (req, res) => 
    const movies = await Movie.find()
        .select("-__v")
        .sort("name");
    res.send(movies);
);

如您所见,Node.js 返回所有数据库,而前端 React 仅根据用户正在查看的页面显示 10 个条目。

根据用户正在查看的页面,从数据库中仅获取 10 个条目是最佳选择。

我该怎么做?

谢谢

【问题讨论】:

【参考方案1】:

您可以使用skip()limit() 来执行此操作。

例子:

const movies = await Movie.find()
    .select("-__v")
    .skip(perPage * currentPage)
    .limit(perPage)
    .sort("name");

或者你可以使用像mongoose-paginate这样的分页包...

【讨论】:

【参考方案2】:

是的,有跳过和限制方法可以从数据库中获取一定数量的数据。

router.get("/", async (req, res) => 
    const movies = await Movie.find()
    .select("-__v").skip(10).limit(10)  // use skip and limit value as you want. 
    .sort("name");
    res.send(movies);
);

【讨论】:

【参考方案3】:

您可以使用.limit(n) 限制返回对象的数量。

router.get("/", async (req, res) => 
    const movies = await Movie.find()
        .select("-__v")
        .sort("name")
        .limit(10);
    res.send(movies);
);

已经有一篇关于这个问题的帖子。参考这个question。

【讨论】:

以上是关于如何使用 mongoose 从 mongoDB 中获取一定数量的对象? (Node.js)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongoose 从 mongoDB 中获取一定数量的对象? (Node.js)

如何使用 mongoose 从 MongoDb 获取数据?

如何从 1 分钟的嵌套数组数据中聚合 OHLC 5 分钟(mongodb、mongoose)

如何使用 Mongoose 在 MongoDB 中插入 JSON 数组

使用 Mongoose 从 Decimal128 中提取十进制 - MongoDB

如何使用 mongodb 和 mongoose 从帖子模型中计算整体帖子活动(喜欢、不喜欢、评论)和用户模型中的参考总和