2012-02-24 125 views
0

我使用node.js和本地mongodb驱动程序(node-mongodb-native);node.js和mongodb-native:等到一个集合非空

我目前的项目使用node.js + now.js + mongo-db。

该系统基本上将浏览器中的数据发送到node.js,后者使用haskell进行处理,然后再次反馈给浏览器。

通过窗体和node.js文本插入到名为“messages”的mongo-db集合中。 haskell线程读取条目并将结果存储在db集合“results”中。这工作正常。

但现在我需要等待结果出现在收集结果中的JavaScript代码。

伪代码:

wait until the collection result is non-empty. 
    findOne() from the collection results. 
    delete the collection results. 

我现在连接到的MongoDB这样的:

var mongo = require('mongodb'), 
    Server = mongo.Server, 
    Db = mongo.Db; 

    var server = new Server('localhost', 27017, { 
     auto_reconnect: true 
    }); 
    var db = new Db('test', server); 

我的Haskell的知识是相当不错的,但不是我的JavaScript技能。 所以我做了大量的搜索,但是我没有走得太远。

回答

2

高兴你解决它,我会写类似的东西:

setTimeout(function(){ 
    db.collection('results',function(coll){ 
     coll.findOne({}, function(err, one){ 
     if(err) return callback(err); 
     coll.drop(callback); //or destroy, not really sure <-- this will drop the whole collection 
     }); 
    }); 
} ,1000); 
+0

嘿,感谢你回答。我以为我自己找不到解决方案,所以你的答案可以保护我。 (我只是在一个开源项目的实现者会议上,所以我们必须快速编写代码...)。 – mrsteve 2012-02-25 01:47:37

+0

欢迎您。 – mindandmedia 2012-02-25 10:02:22

2

解决方案是使用async库。

var async = require('async'); 
globalCount = -1; 

async.whilst(
    function() { 
     return globalCount<1; 
    }, 
    function (callback) { 

     console.log("inner while loop"); 
     setTimeout(db_count(callback), 1000); 
    }, 
    function (err) { 
     console.log(" || whilst loop finished!!"); 
    } 
);