尽管limit(),sort()操作超出了MongoDB Stitch函数的最大内存

时间:2018-03-28 19:23:03

标签: node.js mongodb mongodb-stitch

我正在尝试修复最近在查询MongoDB数据库的Stitch函数上出现的问题。

exports = function readMostRecentDataFromCollection(c) {
    var mongodb = context.services.get('mongodb-atlas');
    var coll = mongodb.db('lexicon').collection(c);
    var result = coll
        .find({
            $and: [{ data: { $exists: true } }, { time: { $exists: true } }]
        })
        .sort({ time: -1 })
        .toArray()[0];

    return result;
};

我收到此错误:

  

查找命令期间执行程序错误:OperationFailed:排序操作使用的RAM超过最大33554432字节。添加索引,或指定较小的限制。

根据MongoDB docs

  

当$ sort紧接在管道中的$ limit之前时,$ sort操作仅保持前n个结果,其中n是指定的限制,而MongoDB只需要在内存中存储n个项目。当allowDiskUse为true且n个项超过聚合内存限制时,此优化仍然适用。

     

在版本2.4中更改:在MongoDB 2.4之前,$ sort将对内存中的所有结果进行排序,然后将结果限制为n个结果。

如果我理解正确,这意味着以下内容应该有效(因为群集使用的是MongoDB版本3.4.14):

exports = function readMostRecentDataFromCollection(c) {
    var mongodb = context.services.get('mongodb-atlas');
    var coll = mongodb.db('lexicon').collection(c);
    var result = coll
        .find({
            $and: [{ data: { $exists: true } }, { time: { $exists: true } }]
        })
        .sort({ time: -1 })
        .limit(1) // adding limit
        .toArray()[0];

    return result;
};

但是,我收到与以前相同的错误。

我不熟悉Mongo / Stitch,所以我可能会遗漏一些非常明显的东西。

0 个答案:

没有答案