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

是否有任何有效的方法可以以最新的第一顺序对给定的mongodb数据进行分页,并避免对大量数据进行排序超出内存限制?

邰棋
2023-03-14

我给出了如下样本数据收集。我正在尝试在最新的第一订单中获取结果,因此我使用了分页并分别对其进行了排序。但是当我尝试对大量数据进行排序时,例如 API 命中限制 100 .然后它抛给我错误

"消息":":: 排序导致的查找命令:: 执行器错误超过内存限制33554432字节,但未选择加入外部排序。中止操作。通过允许磁盘使用:true选择加入。"

{
  "success": true,
  "message": "",
  "status": {},
  "data": {
    "docs": [
 {
        "_id": "5d1dbe9cad2de907c4a6c888",
        "requestedBy": {
          "adminId": "1",
          "adminName": "JJ"
        },
        "reason": "Testing",
        "payload": [
          {
            "recipient": {
              "to": "abc@abc.com",
              "from": "abc@abc.com",
              "bcc": "abc@abc.com"
            },
            "data": {
              "b_name": "Cloud",
              "amount": 100,
              "l_id": 10,
              "date": "10",
              "month": "Jul",
              "year": "2019"
            },
            "template": {
              "name": "Reminder",
              "type": "EMAIL"
            }
          }
],
        "createdAt": "2019-07-04T08:53:48.129Z",
        "updatedAt": "2019-07-04T08:53:48.129Z",
        "__v": 0,
        "id": "5d1dbe9cad2de907c4a6c888"
      }
    ]
}

}

const mongoose = require("mongoose");
const mongoosePaginate = require("mongoose-paginate-v2");

mongoosePaginate.paginate.options = {
  lean: true,
  limit: 200,
  sort:{
    createdAt: -1
  }
};
const MODEL_NAME = "data";

const dSchema = mongoose.Schema(
  {
    requestedBy: {
      adminId: String,
      adminName: String
    },
    reason: String,
    payload: mongoose.Mixed
  },
  { timestamps: true }
);

// Plugins
dSchema.plugin(mongoosePaginate);

// Methods to interact with models
dSchema.statics.getTasks = (query, options) => {
  return mongoose.model(MODEL_NAME).paginate(query, options);
};

共有1个答案

支劲
2023-03-14

https://mongoosejs.com/docs/guide.html#indexes

https://mongoosejs.com/docs/guide.html#timestamps

https://docs.mongodb.com/manual/tutorial/optimize-query-performance-with-indexes-and-projections/

索引还可以提高对给定字段进行常规排序的查询的效率。

https://docs.mongodb.com/manual/indexes/#create-an-index

将索引添加到 createdAt 以提高查询性能

dSchema.index({ "createdAt" : -1 });

https://www . MongoDB . com/blog/post/performance-best-practices-indexing

 类似资料:
  • 问题内容: 要点: 我们一天可以同时处理数千个平面文件。 内存限制是一个主要问题。 我们为每个文件进程使用线程。 我们不按列排序。文件中的每一行(记录)都被视为一列。 不能做: 我们不能使用Unix / Linux的sort命令。 无论多么轻巧,我们都无法使用任何数据库系统。 现在,我们不能只加载集合中的所有内容并使用排序机制。它将耗尽所有内存,程序将得到堆错误。 在这种情况下,您将如何对文件中的

  • 本文向大家介绍Java程序以区分大小写的顺序对数组进行排序,包括了Java程序以区分大小写的顺序对数组进行排序的使用技巧和注意事项,需要的朋友参考一下 可以使用java.util.Arrays.sort()方法以区分大小写的顺序对数组进行排序。在这种情况下,此方法仅需要单个参数,即要排序的数组。演示此的程序如下所示- 示例 输出结果 现在让我们了解上面的程序。 首先定义数组arr []。然后打印未

  • 本文向大家介绍可以单独排序以使用C ++进行排序的最大分区数,包括了可以单独排序以使用C ++进行排序的最大分区数的使用技巧和注意事项,需要的朋友参考一下 我们给定N个数字的数组,元素位于0和N-1范围内。元素未排序。目标是找到可以单独排序的数组的最大分区数量,然后可以将其串联起来以构成一个完整的长度为N的排序数组。 选择每个分区以使其中的元素未排序。对于介于0到N-1之间的N个数字,排序后的元素

  • 问题内容: 假设我们在集合中有一些项目,并且我们想使用某些比较器对它们进行排序,并期望结果在列表中: 一种方法是对列表中的项目进行排序,例如: Anothe方法正在使用排序流: 我想知道哪种方法更有效?排序流是否有任何优势(例如在多核上进行Faste排序)? 在运行时复杂性方面/最快方面是高效的。 我不相信自己要实现一个完美的基准,学习并不能真正启发我。 问题答案: 可以肯定地说,两种形式的排序都

  • 我有学生(弦)和老师(弦列表)。我想根据讲师人数按降序提取记录。讲师如下示例:[a、b、c]-3、[e、f]-2、[g、h、i、j]-4。 我要按4,3,2的顺序。 这取决于现场讲师阵列的大小。如何使用mongoTemplate或自定义mongodb查询或聚合进行查询??

  • 问题内容: 我想创建一个(非匿名)函数,该函数按键按字母顺序对对象数组进行排序。我只编写简单的JavaScript代码,因此框架至少没有帮助我。 问题答案: 这个怎么样? 这使您可以指定用于对数组进行排序的键,这样您就不仅限于硬编码的名称排序。它将对所有共享属性的对象数组进行排序,这些属性将用作键。我相信那是您要找的东西?