我有一个简单的猫鼬模型,在其上我调用find,最大限制为100,它调用完成的回调:
this.find({}).limit(100).exec(done);
如果我将此行修改为(或更高的数字),则永远不会调用该回调
this.find({}).limit(101).exec(done);
任何地方都没有错误,数据库保持正常运行,但是此节点应用程序冻结,必须重新启动。
如果我进入服务器以连接到相同的数据库并连接到mongo shell,则在同一集合上,find({})会在不到一秒的时间内返回所有〜700个集合。当我将同一数据库克隆到本地PC上并运行该应用程序以连接到本地数据库时,它起作用了,但是如果该应用程序连接到同一服务器上的数据库,则该应用程序将在服务器上冻结。
知道如何调试这个吗?
编辑1:添加了模型文件:
模型文件:
'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个文档)
在获得JohnnyK的提示后,我将Mongoose从4.1.11更新为4.3.7,从而解决了该问题。