2016-04-12 2 views
0

マングースは、データを取得しているときにNode.jsをブロックします。私はそれが絶対にブロックされていないと考えられてコールバックが表示されたら、それはちょうどそこに戻ってください。私はそれだけで周りに10秒のためのNodeJSを凍結するExpressJSでこのルートを実行すると、誰もがその接続に到達することはできません場合はマングースクエリブロックNode.js

Container.find({}, function (err, documents) { 
     res.status(200).send(documents); 
}); 

問題がです。

Mongooseを使用して最初にMongoDBとオープンな接続を確立していて、後でそれを実行しません。どうしたの?それはそのように動作するはずですか?

UPDATE:

だからこれは私が

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

database.connect(); 
database.loadModels(initialDb); 

をマングースinitの方法であり、これは私が接続場所ですし、initモデル

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文書を返します。

+0

これらのクエリは削除されてはならないことは間違いありません。あなたは、あなたがあなたのモデルコードとmongooseにどのように接続しているか、もう少し文脈を共有できますか? –

+0

@JohnnyHK約26kレコードを返します。 – Shiroo

+0

@NickTomlin更新情報 – Shiroo

答えて

0

は、[OK]をので、基本的に私は、私は1つのコールバックでそれを取得するのではなく、それをストリームする場合、それはずっといい。この

よう

(私はいくつかの他のアクションに入ることができるようになります)動作すること、が分かりました

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

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

}).on('close',() => { 
    res.send(array); 
}); 

これで問題は解決します。だから、これは私がmongodbから大きなデータを得る方法ですが、私はそれを1つのコールバックで取得するのはなぜそんなに遅くなっていますか? 12MBのデータのため?パースされる必要があるか、または何が必要な大きなjson? これは私にとっては非常に不思議です(遅くなる理由)