我正在尝试使用DerbyJS,Racer和MongoDB开发日志查看器。日志将由不同的源连续插入MongoDB数据库,我的日志查看器应该能够自动更新用户界面上的日志表。
我想知道是否有本地方式来监听MongoDB事件,例如:
- On update
- On delete
这些类似于例如Oracle DB触发器。
答案 0 :(得分:9)
您可以使用名为insert
的特殊集合在mongodb中收听update
,oplog
等事件以及其他数据事件。您只需使用mongod --master
或mongod --replicaSet
Oplog实际上是一个上限集合,mongodb在内部使用它来实现复制。如果您使用主/从复制,您将找到名称为oplog.$main
的集合,如果您使用副本集,则它将被命名为oplog.rs
。
你可以在oplog上使用tailable游标,这应该可行。
Oplog实际上是记录本身。因此,您可能不需要单独存储它们以用于记录目的。但它的大小是固定的。在删除完整的旧数据时的含义。
local
数据库,即维护oplog的地方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
答案 1 :(得分:4)
日志查看器应用程序的典型方法是使用带有tailable cursor日志条目的capped collection。
答案 2 :(得分:1)
不,https://jira.mongodb.org/browse/SERVER-124它必须是申请方。
我不确定node.js是否在其驱动程序中有MongoDB内置触发器,但很可能不是这样,你需要自己编写代码。