Javascript Mongoose查询块Node.js
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建立了一个开放的连接,以后就不再使用它了。有什么
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更新了信息