我正在尝试修复最近在查询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,所以我可能会遗漏一些非常明显的东西。