Javascript Mongoose查询块Node.js

Javascript Mongoose查询块Node.js,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,Mongoose在获取数据时会阻止Node.js。我认为它应该是绝对没有阻塞的,当回调出现时,它应该回到那里 问题在于: Container.find({}, function (err, documents) { res.status(200).send(documents); }); 当我在ExpressJS中运行此路由时,它只会将NodeJS冻结大约10秒,然后其他人就无法连接 我一开始使用Mongoose就与MongoDB建立了一个开放的连接,以后就不再使用它了。有什么

Mongoose在获取数据时会阻止Node.js。我认为它应该是绝对没有阻塞的,当回调出现时,它应该回到那里

问题在于:

Container.find({}, function (err, documents) {
        res.status(200).send(documents);
});
当我在ExpressJS中运行此路由时,它只会将NodeJS冻结大约10秒,然后其他人就无法连接

我一开始使用Mongoose就与MongoDB建立了一个开放的连接,以后就不再使用它了。有什么问题吗?它应该是这样工作的

更新:

这就是我对猫鼬的看法

function initialDb() {
seed();
seedStructure();
startApplication();
}

database.connect();
database.loadModels(initialDb);
这是我连接和初始化模型的地方

import mongoose from 'mongoose';
import chalk from 'chalk';
import config from '../config';

export default {
    loadModels(callback){
        require('../../models/site');
        require('../../models/page');
        require('../../models/container');
        require('../../models/template');
        require('../../models/theme');

        if (typeof callback === 'function') {
            return callback();
        }
    },

    connect () {
        mongoose.connect(config.db.uri, function (err) {
            if (err) {
                console.error(chalk.red('Could not connect to MongoDB!'));
                console.log(err);
            }
        });
    },

    disconnect(callback) {
        mongoose.disconnect(function (err) {
            console.info(chalk.yellow('Disconnected from MongoDB.'));
            callback(err);
        });
    }
};
模型呢

var mongoose = require('mongoose');
var Schema = mongoose.Schema;



var container = new Schema({

});


let model = mongoose.model('container', container);


module.exports = model;

它会返回大约26k个文档。

好的,所以我基本上发现,如果我将流式处理,而不是通过一个回调来获取它,它会工作得更好(我将能够进行其他一些操作)

像这样

var stream = Container.find({}).stream();

var array = [];
stream.on('data', (doc) => {
    array.push(doc);
}).on('error', (err) => {

}).on('close', () => {
    res.send(array);
});
这将解决问题。所以这就是我从mongodb获取大数据的方式,尽管如果我在一次回调中获取数据,它的速度为什么会减慢这么多?由于12MB的数据?需要解析的大json还是什么?
因为这对我来说是一个相当神秘的问题(慢下来的原因)

您绝对正确,这些查询不应该被删除。关于如何连接到mongoose和您的模型代码,您能多分享一些上下文吗?@JohnnyHK it返回大约26k条记录。@NickTomlin i更新了信息