我有一个Mongoose find-command,大约需要4秒钟才能完成(应用程序在Raspberry Pi上运行)。此外,我需要每100毫秒将数据保存到数据库并发出一个事件。
事件发射和保存运行正常,直到执行find-command。然后它完全停止(事件发射和保存),直到find-command完成。我尝试在find-command之前,回调内以及需要保存和发出数据时输出一些文本。调用find-command它的回调函数之间没有输出任何内容。
据我所知,node.js应该可以在调用回调函数之前执行其他操作。应用程序在Raspberry Pi上运行是否重要?我还没有读过有关MongoDB和Raspberry Pi问题的其他人... 还有什么可能是问题?
发出和保存数据的代码:
// New data received from socket connection
socket.on('new-data', function(data){
console.log('New data'); // Never output between 'Starting find-command' and 'Completed find-command'
someEvent.emit('new-data');
var data = new Data({
value1: 1234,
value2: 5678
});
data.save(function(err){
if(err) return handleErrror(err);
});
});
find-command代码:
console.log('Starting find-command');
Data.find({value1: { $gt: min, $lt: max }}, function(err, data){
console.log('Completed find-command');
// Do something with data
});
更新
我尝试在find-command中使用lean和limit,它显着提高了性能(从4s到500ms)。不幸的是,这还不够好......
Data.find({value1: { $gt: min, $lt: max }}).limit(500).lean().exec(function(err, data){
console.log('Completed find-command');
// Do something with data
});