Mongo作为事件触发器

时间:2013-03-03 11:22:16

标签: mongodb triggers command queue timed

我觉得通过使用mongo的服务器端javascript功能,mongoDB也可以用作事件触发器系统。

例如

    db.system.js.save(
    {
        _id : "timer",
        value : function timer(interval,times,fun){ var s=new Date(); var e=new Date(); var cnt=0; while(cnt<times){ print("audit: "+cnt); eval(fun()); cnt++; s=new Date(); while(e-s < interval){e=new Date();}}};
    }
db.testcol.save({a:timer(1000,3,function(){print(Date() + "Message");})})
  

输出=========

audit: 0
Sun Mar 03 2013 16:29:46 GMT+0530 (IST)Message
audit: 1
Sun Mar 03 2013 16:29:47 GMT+0530 (IST)Message
audit: 2
Sun Mar 03 2013 16:29:48 GMT+0530 (IST)Message

没有探索这种可能性,但这种想法带来了以下几点 1)触发事件系统,特定集合充当延迟命令队列。 2)延迟/定时持久性

还有更多用途吗?

1 个答案:

答案 0 :(得分:1)

不,MongoDB没有触发器:https://jira.mongodb.org/browse/SERVER-124

你触发某些东西的方式并不是一种健康的方法,甚至不确定输出到集合本身的内容,可能是函数的对象或空值。

此外,我相信这只会在控制台中运行,而不会在客户端程序中运行,除非您使用eval(可能,甚至不确定),而且,我甚至不需要解释原因这很糟糕。

您可以使用活动记录(或类似的东西)来完成此任务。