【问题标题】:Node.js + mongoose find freezes node when more than 100 resultsNode.js + mongoose find 在超过 100 个结果时冻结节点
【发布时间】:2016-05-02 22:26:09
【问题描述】:

我有一个简单的猫鼬模型,我在其上调用 find 并限制最大 100 它调用 done 回调:

this.find({}).limit(100).exec(done);

如果我将此行修改为(或任何更高的数字),则永远不会调用回调

this.find({}).limit(101).exec(done);

任何地方都没有错误,数据库一直在工作,但是这个节点应用程序冻结了,必须重新启动。

如果我 ssh 进入服务器以连接到同一个数据库并连接到 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 个文档)

【问题讨论】:

  • 发布您的模型文件
  • 已添加以及我如何使用它的示例。我会无限制地使用它,但我正在试验哪里出错并发现了这种行为
  • 过去几天还有两个类似的问题没有得到解决。你用的是什么版本的猫鼬?
  • 直到现在我都在使用 4.1.11,我很快检查了最新的(4.3.7),似乎还可以。如果更新解决了这个问题,我会做一个完整的检查并报告,谢谢你的提示。奇怪的是它在本地工作而不是在服务器上
  • 你不应该使用return next();吗?

标签: node.js mongodb mongoose


【解决方案1】:

根据 JohnnyK 的提示,我将 Mongoose 从 4.1.11 更新到 4.3.7 并解决了问题。

【讨论】:

    猜你喜欢
    • 2018-05-12
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多