0

我有这种感觉,通过使用 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");})})

输出 =========

审核:0
2013 年 3 月 3 日星期日 16:29:46 GMT+0530 (IST)消息
审核:1
2013 年 3 月 3 日星期日 16:29:47 GMT+0530 (IST) 消息
审计:2
2013 年 3 月 3 日星期日 16:29:48 GMT+0530 (IST) 消息

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

这个还有什么用处吗?

4

1 回答 1

1

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

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

此外,我相信这只会在控制台中起作用,而永远不会在客户端程序中起作用,除非你使用eval(也许,甚至不确定),而且,我什至不需要解释为什么这是不好的。

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

于 2013-03-03T11:26:09.023 回答