使用Q时如何使用Mongo Collection方法?

时间:2015-08-07 11:43:10

标签: node.js mongodb meteor promise q

我希望在一些看起来像这样的代码中更新Mongo集合:

var Q = Npm.require('q');
var db = new Mongo.Collection('mydb');

function doSomething() {
    var d = Q.defer();
    setTimeout( function() {
        d.resolve();
    }, 1000);
    return d.promise;
}

doSomething().then( function() {
    console.log('before find');
    var records = db.find({}).fetch(); // blocking operation never completes
    console.log('after find');
    console.log(records); // should be []
});

当使用上面的代码运行meteor时,它会在查找"之前得到记录"但随后执行停止等待db.find完成。它永远不会完成。

对此有任何解决方案或解决方法吗?

更新:似乎导致问题的.fetch()。我需要这个部分,我想操纵我从Mongo收到的数据。

1 个答案:

答案 0 :(得分:1)

不使用fetch,而是添加回调函数。 它将允许您在检索数据后操作数据:

var records = db.find({}, function(error, data){

        // Do something with your data here
});

**编辑 - 使用上面的回调,返回一个光标。如果要返回包含结果的数组,请使用以下命令:

 var records = db.find({}).toArray(function(error, data){

        // Do something with your data here
});