繁体   English   中英

使用Node.js监视Mongo的更改

[英]Monitoring Mongo for changes with Node.js

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

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

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

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

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

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

在此期间,您只能尝试使用诸如(长期)AJAX轮询,永久帧等技术来模拟此行为,但每个都有其缺点。

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

-daniel

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

npm install mubsub可以帮到你

collection.insert({“key1”:val1,“key2”:“val2”},function(err,info){
if(err){//处理这个} else {if(info){

你打电话给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();
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM