【发布时间】:2017-03-23 10:58:23
【问题描述】:
我正在使用 Mongoose、Mongoose-paginate 和 ExpressJS。我有这个错误:
检索流时出错:MongoError: Runner 错误:溢出排序 阶段缓冲数据使用量 34227161 字节超出内部限制 33554432 字节
routes.js:
router.get("/", function(req, res, next) {
var page = req.query.page === undefined ? 1 : req.query.page;
var options = {
page: page,
limit: 30,
sort: {
created_at: 'desc'
}
};
// https://github.com/edwardhotchkiss/mongoose-paginate
Stream.paginate(query, options, function(err, result) {
if (err) {
console.log("Error retrieving streams: " + err);
errorMessage = "A problem occurred retrieving the streams";
return res.render("streams", {
streams: {},
errorMessage: errorMessage
});
}
return res.render("streams/list", {
streams: result.docs,
page: parseInt(result.page),
pages: parseInt(result.pages)
});
});
});
如何解决 Mongoose 中的数据限制问题?
编辑:
在answer 之后,我认为data 字段中的大小变得太大,那么如何索引data 字段?
这是我的模型:
model.js:
var mongoose = require("mongoose");
var mongoosePaginate = require('mongoose-paginate');
// Declare schema
var streamSchema = new mongoose.Schema({
user_id: {
type: String,
required: true
},
title: {
type: String,
required: true
},
description: {
type: String,
required: true
},
hidden:{
type: String
},
data: {
type: Object
}
});
streamSchema.plugin(mongoosePaginate);
// Export schema
// Model.paginate()
mongoose.model("Stream", streamSchema);
当我查询流列表时,我可以忽略data字段吗?
编辑 2:
使用此解决方案:
db.mydb.ensureIndex({created_at: 1})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
我仍然遇到同样的错误...
编辑 3:
找到排除字段的答案:
var options = {
page: page,
limit: 30,
sort: {
created_at: 'desc'
},
select: '-data'
};
我仍然遇到同样的错误...
【问题讨论】:
-
见这里:stackoverflow.com/questions/27023622/… 你可以尝试索引 created_at 字段。
-
@dyouberg 我已经看到了这个答案,但我怎么能
Indexing the sort field??
标签: node.js mongodb express mongoose