当前位置: 首页 > 知识库问答 >
问题:

从MongoDB集合以10块的形式加载文档的最简单方法

秦新立
2023-03-14

我想创建一个创建订单的应用程序,然后将它们加载到列表中。问题是我不能一次加载所有订单。我想10乘10加载它们。

然而,这在MongoDB中看起来非常困难,因为在SQL中没有自动id。我知道如何模拟自动id,但我认为应该更容易实现此功能。

那么,给定一个MongoDB集合,如何从最新的文档开始,一直加载到最新的文档?

共有1个答案

赫连飞沉
2023-03-14

您需要按字段对文档进行排序,然后使用skip

这里有一个详细的解释:

假设您在订单收集中有这8个文档。

[
    {
        "_id": "5e390fc33285e463a0799689",
        "customer": "Max",
        "total": 10,
        "orderDate": "2020-02-04T06:31:31.311Z",
        "__v": 0
    },
    {
        "_id": "5e390fd03285e463a079968a",
        "customer": "John",
        "total": 9.2,
        "orderDate": "2020-02-04T06:31:44.190Z",
        "__v": 0
    },
    {
        "_id": "5e390fda3285e463a079968b",
        "customer": "Smith",
        "total": 11.3,
        "orderDate": "2020-02-04T06:31:54.248Z",
        "__v": 0
    },
    {
        "_id": "5e390fdf3285e463a079968c",
        "customer": "Smith",
        "total": 12.3,
        "orderDate": "2020-02-04T06:31:59.993Z",
        "__v": 0
    },
    {
        "_id": "5e390fec3285e463a079968d",
        "customer": "Jimmy",
        "total": 15.6,
        "orderDate": "2020-02-04T06:32:12.336Z",
        "__v": 0
    },
    {
        "_id": "5e390ffd3285e463a079968e",
        "customer": "Wesley",
        "total": 11,
        "orderDate": "2020-02-04T06:32:29.670Z",
        "__v": 0
    },
    {
        "_id": "5e3910163285e463a079968f",
        "customer": "Adam",
        "total": 6.1,
        "orderDate": "2020-02-04T06:32:54.131Z",
        "__v": 0
    },
    {
        "_id": "5e3910213285e463a0799690",
        "customer": "Michael",
        "total": 7.2,
        "orderDate": "2020-02-04T06:33:05.166Z",
        "__v": 0
    }
]

如果我们想将这些文档分块,我们可以编写如下示例:

router.get("/orders", async (req, res) => {
  const page = req.query.pageIndex ? +req.query.pageIndex : 1;
  const limit = req.query.pageSize ? +req.query.pageSize : 10;
  const skip = (page - 1) * limit;

  const result = await Order.aggregate([
    {
      $sort: {
        orderDate: -1
      }
    },
    {
      $facet: {
        totalRecords: [{ $count: "total" }],
        data: [{ $skip: skip }, { $limit: limit }]
      }
    }
  ]);
  res.send(result);
});

我们在查询字符串中发送pageIndex和pageSize参数,如下http://...../orders?pageIndex=1

当我们使用pageIndex=1pageSize=3时,结果将如下所示:(如您所见,我们还返回记录总数,以便客户端可以构建分页号)

[
    {
        "totalRecords": [
            {
                "total": 8
            }
        ],
        "data": [
            {
                "_id": "5e3910213285e463a0799690",
                "customer": "Michael",
                "total": 7.2,
                "orderDate": "2020-02-04T06:33:05.166Z",
                "__v": 0
            },
            {
                "_id": "5e3910163285e463a079968f",
                "customer": "Adam",
                "total": 6.1,
                "orderDate": "2020-02-04T06:32:54.131Z",
                "__v": 0
            },
            {
                "_id": "5e390ffd3285e463a079968e",
                "customer": "Wesley",
                "total": 11,
                "orderDate": "2020-02-04T06:32:29.670Z",
                "__v": 0
            }
        ]
    }
]

当我们使用pageIndex=2pageSize=3时,结果会是这样的:

[
    {
        "totalRecords": [
            {
                "total": 8
            }
        ],
        "data": [
            {
                "_id": "5e390fec3285e463a079968d",
                "customer": "Jimmy",
                "total": 15.6,
                "orderDate": "2020-02-04T06:32:12.336Z",
                "__v": 0
            },
            {
                "_id": "5e390fdf3285e463a079968c",
                "customer": "Smith",
                "total": 12.3,
                "orderDate": "2020-02-04T06:31:59.993Z",
                "__v": 0
            },
            {
                "_id": "5e390fda3285e463a079968b",
                "customer": "Smith",
                "total": 11.3,
                "orderDate": "2020-02-04T06:31:54.248Z",
                "__v": 0
            }
        ]
    }
]

当我们使用pageIndex=3pageSize=3时,结果会是这样的:

[
    {
        "totalRecords": [
            {
                "total": 8
            }
        ],
        "data": [
            {
                "_id": "5e390fd03285e463a079968a",
                "customer": "John",
                "total": 9.2,
                "orderDate": "2020-02-04T06:31:44.190Z",
                "__v": 0
            },
            {
                "_id": "5e390fc33285e463a0799689",
                "customer": "Max",
                "total": 10,
                "orderDate": "2020-02-04T06:31:31.311Z",
                "__v": 0
            }
        ]
    }
]

对于您的情况,您需要发送10作为pageSize值。

 类似资料:
  • 我将PHP和MySQL用于社交网络系统 我有MySQL表命名为member_feed,在这个表中我为每个成员保存提要,我的表结构是: 在这个表中,我有超过1.2亿条记录,每个成员都有一套记录。 我目前的工作是从MySQL迁移到MongoDB,我是MongoDB的新手。所以我需要将此表转换为MongoDB中的集合。我想为member_feed表建立我的收藏,比如: 1-表格中的每一行member_f

  • 问题内容: 单击按钮时,我的GWT应用程序将返回嵌入HTML页面的PDF文件,该文件如下所示: 问题是服务器创建该PDF文件可能需要一段时间,所以我想要的是一个带有加载动画的等待屏幕,该动画可以在后台下载PDF文件,然后在完成文件后显示页面如上所述。 一种明显的方法是显示一个加载页面,向服务器发送异步命令,然后在调用onSucceed方法后,正常调用该页面。缺点是我必须添加一些服务器端逻辑以使PD

  • 问题内容: 例如,我目前正在这样做: 你能打败这个吗? 问题答案:

  • 在那里我得到了多个chunksize部分,我试图做一些操作,比如 对于操作,它选择任意一个块体部分,并执行它的所有操作。那剩下的部分呢?如何在没有内存错误的情况下对完整的数据进行操作。

  • 本文向大家介绍C#实现简单合并word文档的方法,包括了C#实现简单合并word文档的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现简单合并word文档的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍MongoDB查询以公式更新集合中文档的每个字段,包括了MongoDB查询以公式更新集合中文档的每个字段的使用技巧和注意事项,需要的朋友参考一下 要使用公式更新集合中文档的每个字段,请使用MongoDB update()。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是使用公式更新集合中文档的每个字段的查询- 在find()