mongodb和Node.js上的async.parallel

时间:2013-08-17 04:31:32

标签: javascript node.js mongodb asynchronous

在以下代码中:

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 个答案:

答案 0 :(得分:-1)

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

我使用mongoose,所以我将你的代码翻译成mongoose,我可以让它工作。 我使用的类别模型也来自我的一个项目,所以它与你发布的有点不同。 这是我的代码:

( 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');
    });
});
}());

希望这对你有用。