gpt4 book ai didi

node.js - 在 Mongo 中查询时的速度问题和内存错误

转载 作者:行者123 更新时间:2023-12-04 08:12:08 24 4
gpt4 key购买 nike

我有一个包含超过 100,000 条记录的表。服务器:node.js/express.js。 DB:蒙戈
在客户端,实现了一个带有寻呼机的表。每次请求 10 条记录。
当然,当有 10,000 条记录时,一切都运行得更快,但现在不仅存在速度问题。
我的聚合:

import { concat } from 'lodash';
...
let query = [{$match: {}}];
query = concat(query, [{$sort : {createdAt: -1}}]);
query = concat(query, [
{$skip : (pageNum - 1) * perPage}, // 0
{$limit : perPage} // 10
]);
return User.aggregate(query)
.collation({locale: 'en', strength: 2})
.then((users) => ...;
2种情况:
  • 第一次获取非常慢
  • 当我点击最后一页时出现错误:
    MongoError:排序超出了 104857600 字节的内存限制,但没有选择外部排序。中止操作。通过 allowDiskUse:true 选择加入。

  • 请告诉我,我正在错误地构建聚合,或者服务器上的内存是否存在问题,如错误所述并且需要额外的 nginx 设置(另一个人参与此操作)或者问题是否复杂,或者可能是其他问题共?
    添加:
    我注意到排序时没有使用索引,虽然应该使用它?
    enter image description here
    聚合以执行 console.log =>
    [
    {
    "$match": {}
    },
    {
    "$lookup": {
    ...
    }
    },
    {
    "$project": {
    ...,
    createdAt: 1,
    ...
    }
    },
    {
    "$match": {}
    },
    {
    "$sort": {
    "createdAt": -1
    }
    },
    {
    "$skip": 0
    },
    {
    "$limit": 10
    }
    ]
    感谢您的回答,对不起我的英语:)

    最佳答案

    它确实说您有内存限制,这是有道理的,考虑到您正在尝试过滤 100,000 个请求。我会尝试使用 return User.aggregate(query, { allowDiskUse: true }) //etc ,看看这是否对您的问题有帮助。
    虽然这不是专门针对 Node.js 驱动程序的文档,但此 link总结了什么allowDiskUse选项可以(或简而言之,它允许 MongoDB 超过 100MB 内存限制,并在执行查询时使用您的系统存储来临时存储一些信息)。

    关于node.js - 在 Mongo 中查询时的速度问题和内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65900334/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com