当超过100个结果时,Node.js + mongoosefind冻结节点
我有一个简单的mongoose模型,我打电话查找限制最大100它调用完成callback:
this.find({}).limit(100).exec(done);
callback从来没有被称为如果我修改此行(或任何更高的数字)
this.find({}).limit(101).exec(done);
在任何地方都没有错误,数据库一直在工作,但是这个节点的应用程序冻结,必须重新启动。
如果我ssh到服务器连接到同一个数据库并连接到mongo shell,在同一个集合find({})返回所有约700集合在不到一秒钟。 当我将同一个数据库克隆到本地PC并运行应用程序以连接到本地数据库时,它可以正常工作,但是如果服务器连接到同一服务器上的数据库,则该应用程序在服务器上冻结。
任何想法如何debugging这一个?
编辑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,并解决了这个问题。