我有一个简单的猫鼬模型,我在其中调用find,其最大值为100,它调用完成的回调:
this.find({}).limit(100).exec(done);
永远不会调用回调如果我将此行修改为(或任何更高的数字)
this.find({}).limit(101).exec(done);
任何地方都没有错误,数据库仍在运行,但此节点应用程序冻结,必须重新启动。
如果我进入服务器连接到同一个数据库并连接到mongo shell,则在同一个集合中,find({})会在不到一秒的时间内返回所有~700个集合。 当我将同一个数据库克隆到我的本地PC并运行应用程序以连接到本地数据库时,它可以工作,但是如果它连接到同一服务器上的数据库,应用程序会在服务器上冻结。
知道如何调试这个吗?
Edit1:添加了模型文件:
模型文件:
'use strict';
let mongoose = require('mongoose');
let Schema = mongoose.Schema;
let foodSchema = new Schema(
{
name: Object,
type: String,
description: Object,
price: Number,
priceBig: Number,
active: Boolean
},
{
collection: 'foods'
}
);
let model = mongoose.model('food', foodSchema);
model.getAllFoods = function (done) {
this.find({}, done);
};
model.getActiveFoods = function (done) {
this.find({active: true}, done);
};
model.getFoodById = function (id, done) {
this.findOne({_id: id}, done);
};
module.exports = model;
用法:
foodModel.getAllFoods(function (err, docs) {
if (err) {
res.sendStatus(500);
return;
}
res.send(docs);
});
getActiveFoods工作得很好(返回96个文档)
答案 0 :(得分:3)
在JohnnyK的提示之后,我将Mongoose从4.1.11更新为4.3.7并解决了这个问题。