使用Node.js监视Mongo的更改

时间:2010-06-21 20:14:39

标签: javascript node.js mongodb events database

我正在使用Node.js进行一些项目工作,我想监视我的Mongo数据库(集合)是否有变化,如果添加了某些内容,基本上会触发事件。

任何人都知道这是否可行?我正在使用node-mongodb-native驱动程序。

如果不是,我也喜欢将服务器上的数据(使用node)推送到客户端浏览器的任何可用指针。

4 个答案:

答案 0 :(得分:3)

问题是是否所有数据都通过node.js应用程序添加到数据库中。如果是这样,您可以使用node.js的EventEmitter类来触发事件(http://nodejs.org/api.html#eventemitter-14)。

如果数据库由其他应用程序填充,则事情变得困难。在这种情况下,你需要像数据库触发器这样的东西,它是在MongoDB中尚未提供的AFAIK。

一旦HTML 5 websockets API进入所有主流浏览器,就可以将事件推送到客户端(aka Comet)。

与此同时,您只能尝试使用(长期)AJAX轮询,永久框架等技术来模拟此行为,但每个都有其缺点。

答案 1 :(得分:3)

我会在你的mongodb中打开复制。有一个复制?包含更改列表的数据库,类似于mysql复制日志。你可以监控它。

-daniel

答案 2 :(得分:1)

自上次回答以来差不多3年了。我建议看看:

npm install mubsub应该让你到那里

答案 3 :(得分:0)

collection.insert({“key1”:val1,“key2”:“val2”},function(err,info){
        如果(ERR){             //处理这个(事情         }         其他{             如果(信息){

你打电话给fireandforgetfunction(info);这里 可以写入日志或发送到SQS或做一些其他子生成或正在处理的东西。这甚至可能是一个回调,但我认为在大多数情况下可能会发生火灾和遗忘。           我说火和忘记,因为我认为你不需要坚持           响应,以便您可以返回您需要的客户端。           在部分回答您的其他问题时,您可以像这样返回JSON

         db.close();
         var myJSON =[];                            
         sys.puts("Cool info stored and did a non blocking fire and forget for some other mongo monitoring stuff/process and sending control back to the browser");
         sys.puts(sys.inspect(info));//remove later
         myJSON.push({"status":"success"});                     
         myJSON.push({"key1":val1,"key2":val2});//or whatev you want to send
         res.writeHead(200, { "Content-Type" : "text/plain" });
         res.write(JSON.stringify(myJSON));
         res.end();
        }
    }