node.js和mongodb-native:等到集合非空

时间:2012-02-24 19:36:16

标签: javascript node.js mongodb mongoose

我正在使用node.js和本机mongodb驱动程序(node-mongodb-native);

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

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

通过form和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 个答案:

答案 0 :(得分: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!!");
    }
);

答案 1 :(得分: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);