一尘不染

当超过100个结果时,Node.js +猫鼬查找会冻结节点

node.js

我有一个简单的猫鼬模型,在其上我调用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个文档)


阅读 217

收藏
2020-07-07

共1个答案

一尘不染

在获得JohnnyK的提示后,我将Mongoose从4.1.11更新为4.3.7,从而解决了该问题。

2020-07-07