当前位置: 首页 > 面试题库 >

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

沃学
2023-03-14
问题内容

我有一个简单的猫鼬模型,在其上我调用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,从而解决了该问题。



 类似资料:
  • 问题内容: 我需要在node.js中用猫鼬返回查询的结果。 如何返回值以将值设置为变量? 我需要做的是: 为了有: 非常感谢您的回复 。 我还有另一个问题。 如何使用find或findOne在查询运算符中传递变量?喜欢 : 问题答案: 有几种方法可以实现您想要的。 1.使用猫鼬查询 在这种策略中,您的函数返回一个Mongoose查询,您以后可以使用它来调用该方法并使用它来获取结果。 然后,您可以简

  • 我正在Node上做一个基于开源微服务的项目。js。 有些微服务非常薄,只与MongoDB交互,所以我没有在那里使用Sails,而是更喜欢直接使用Mongoose。因此,我为需要在mongo中持久化的每个对象实现了mongoose模式。 我还将在其他一些微服务中使用Sails.js,因此我必须为我想要持久化的对象实现Waterline类型的模式 问题是模式的重复,我觉得这没用。 我希望在所有服务中使

  • 问题内容: 我有一个使用名为Todo的模型的路由设置,如下所示: 但是,todos.length始终为0,因为它找不到任何结果。当我跑步时: 我确定我已连接到同一数据库。我可以在mongod控制台中看到连接。我的连接位于config / db.js文件中: 我的server.js中的连接如下: 在Mongo Shell中,我得到1个结果。我期望此结果将由find查询返回。有什么我想念的吗?我正在使

  • 问题内容: 我有一张带有度量的表格,称为 measures 。该表的第一列表示 位置 ,第二列表示对应的 值 (示例已简化)。 该表如下所示(请注意 loc1的 2个条目): 我现在想制定一个SQL查询(实际上我使用sqlite),该查询仅返回表的前两行(即loc + value1和loc1 + value2),因为此位置在该表中有多个条目。 伪文本的表达方式是:向我显示位置的行,这些行在整个表的

  • 问题内容: 我在解决此mongodb(猫鼬)问题时遇到很多困难。 存在此模式“推荐”(用户名,roomId,ll和日期),其集合包含对用户的推荐。 我需要获取最推荐的房间列表(按roomId)。下面是模式和我尝试过的猫鼬查询解决方案。 问题答案: 从聚合管道返回的结果只是普通对象。因此,您将排序作为流水线阶段而不是作为单独的操作进行: 因此,也可以使用多种流水线运算符 或 或 和其他东西。这些可以

  • 问题内容: 我刚开始和猫鼬一起玩。我有以下代码: 将条目添加到数据库中没有问题,但是检索它们时遇到了问题。我对整个工作原理有些困惑。我的理解如下: 有一些架构,就像oop中的类一样,因此只是数据库中记录的蓝图。该模型是一条记录,可以,也许更多,因为我看到您可以向模型添加方法。好吧…我不太了解如何使用它们。你能给我一个线索,他们到底是什么? 返回主题:发出find命令时,它会调用匿名函数,而docs