2013-08-17 59 views
0

在下面的代码:async.parallel有关MongoDB和Node.js的

var collection = db.collection('colname'); 
    async.parallel([ 
     function(callback(){collection.find({category:'a'}).sort({rank:1}).toArray(callback)}, 
     function(callback(){collection.find({category:'b'}).sort({rank:1}).toArray(callback)} 
    ], function(err, result){ 
     if (err) throw err; 
     console.log('a'); 
     concole.log(result); 
     console.log('b'); 
    }); 

如果我运行上面的代码,这是内部MongoClient.connect功能顺便说一下,我在屏幕上得到了a但没有得到b。所以看起来console.log(result)停止运行代码。我怎样才能解决它并并行运行查询?

谢谢。

回答

-1

有很多明显的语法错误,但除此之外,代码似乎对我很好。我没有直接使用过mongo驱动,所以我不能完全确定。

我使用猫鼬,所以我翻译你的代码与猫鼬一起工作,我可以让它工作。 我也使用过的类别模型来自我的一个项目,所以它与您发布的内容有点不同。 这里是我的代码:

(function() { 
var mongoose = require('mongoose'), db, async = require('async'); 
mongoose.connect('mongodb://127.0.0.1/test'); 
db = mongoose.connection; 
db.once('open', function callback() { 
    var collection = require('../src/db').Category; 
    async.parallel([ 
    function(callback) { 
     collection.find({ 
      categoryType : 1 
     }).sort({ 
      categoryName : 1 
     }).exec(callback); 
    }, 
    function(callback) { 
     collection.find({ 
      category : 2 
     }).sort({ 
      categoryName : 1 
     }).exec(callback); 
    }], function(err, result) { 
     if (err) 
      throw err; 
     console.log('a'); 
     console.log(result); 
     console.log('b'); 
    }); 
}); 
}()); 

希望这对你有用。

+0

什么是“许多明显的语法错误”?你的意思是我没有包含需要模块导入或连接功能的代码?然后我将它们排除在外,以便轻松关注导致问题的部分。另外,我根本没有任何猫鼬的知识,因此我将不得不花费大量时间来掌握你的代码......所以我现在不能回复太多...... – Blaszard

+0

没有进口或连接功能,但还有其他错误。像回调不应该像'function(callback(){})'它应该是'function(callback){}'。至于猫鼬,我不知道在mongodb驱动程序和猫鼬中究竟有多少差异,所以我对此表示歉意。 – RohanJ