我正在尝试使用 DerbyJS、Racer 和 MongoDB 开发日志查看器。日志将通过不同的来源不断插入到 MongoDB 数据库中,我的日志查看器应该能够自动更新用户界面上的日志表。
我想知道是否有一种监听 MongoDB 事件的 native 方式,例如:
- On update
- On delete
这些类似于 Oracle 数据库触发器等。
最佳答案
您可以使用名为 oplog
的特殊集合来监听 mongodb 中的 insert
、update
和其他数据事件。您只需使用 mongod --master
或 mongod --replicaSet
在您的数据库实例上启用复制。
Oplog实际上是一个capped collection,mongodb内部使用它来实现replication。如果您使用的是主/从复制,您会发现名为 oplog.$main
的集合,如果您使用的是副本集,它将被命名为 oplog.rs
。
您可以在 oplog 上使用 tailable 游标,这应该可行。
Oplog 实际上就是日志本身。因此,您可能不需要为了记录目的而单独存储它们。但是它的大小是固定的。意思是当其完整的旧数据被删除时。
同时确保您正在查看本地
数据库,这是维护操作日志的地方
这是来自 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
关于node.js - NodeJS - MongoDB 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11817149/