使用Node.js监控Mongo的更改

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

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

如果不是这样,我还想要从服务器(使用node运行)推送数据到客户端浏览器的任何可用的指针。

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

如果数据库由其他应用程序填充,事情变得越来越困难。 在这种情况下,您需要类似于数据库触发器,这是MongoDB中尚未提供的AFAIK。

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

同时,你只能使用像(长期)AJAX轮询,永久框架等技术来模拟这种行为,但每个都有其弱点。

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

-daniel

自从最后一个答案差不多3年了。 我会build议看看:

npm install mubsub应该让你在那里

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

你叫一个fireandforgetfunction(info); 在这里可以写入日志或发送到SQS或做一些其他的孩子产卵或在过程中的东西。 这甚至可能是一个callback,但我认为在大多数情况下,火灾和遗忘可能会发生。 我说火了,忘记了,因为我认为你不需要阻止你的回应,所以你可以把你需要的东西还给客户。 而在部分回答你的其他问题,你可以像这样返回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(); } }