NodeJS - MongoDB 触发器

3
我正在尝试使用DerbyJS、Racer和MongoDB开发一款日志查看器。这些日志将通过不同的来源连续插入到MongoDB数据库中,我的日志查看器应该能够自动更新用户界面上的日志表。
我想知道是否有原生的方法可以监听MongoDB事件,比如:
 - On update
 - On delete

这些类似于Oracle DB触发器。
3个回答

10
您可以使用名为oplog的特殊集合来监听像insertupdate和其他数据事件。您只需要在您的数据库实例上启用复制,可以使用mongod --mastermongod --replicaSet
实际上,Oplog是一个受限制的集合,由mongodb内部用于实现复制。如果您正在使用主/从复制,则会以oplog.$main的名称找到该集合,如果您正在使用副本集,则将以oplog.rs命名。
您可以在oplog上使用可追溯的光标,这应该有效。
实际上,Oplog本身就是日志。因此,您可能不需要将其单独存储以进行记录。但是它的大小是固定的,当它满时,旧数据会被删除。
还要确保您查看的是local数据库,这是维护oplogs的地方。
以下是mongoskin wiki page中的工作示例。
skin = require "mongoskin"
db = skin.db "localhost:27017/local"

#//Cursor on oplog (a capped collection) which maintains a history for replication
#//oplog can be used only when replication is enabled
#//Use oplog.rs instead of oplog.$main if you are using replica set

oplog = db.collection "oplog.$main"
cursor = oplog.find({'ns': "icanvc.projects"},{tailable: yes, awaitData: yes})

#//Using cursor.nextObject will be slow
cursor.each (err, log)->
    console.error err if err
    console.log log if not err

4

谢谢,我会尝试一下看看它是否能够达到目的 :) 同时我会给出反馈。你认为我需要使用capped collection来使其工作吗?为了产生触发效果,或者我可以只使用可遍历游标? - F. Santiago
是的,可遍历游标只能与固定集合一起使用。 - JohnnyHK

1
不,https://jira.mongodb.org/browse/SERVER-124 这必须在应用程序端完成。
我不确定node.js的驱动程序中是否内置了MongoDB触发器,但很可能没有,因此您需要自己编写代码。

如果不行的话,那是因为我错误地使用了触发器的定义。我的意思是你所说的,在数据库更改时更新应用程序,但必须是应用程序查询数据库,不能反过来。 - F. Santiago
MongoDB中没有未解决的[问题|功能|缺陷|问题]的一天不同于其他日子 :) 第一次回复日期:2009年7月14日 - user956584

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接