3

我正在尝试使用 DerbyJS、Racer 和 MongoDB 开发日志查看器。日志将由不同的来源连续插入到 MongoDB 数据库中,我的日志查看器应该能够自动更新用户界面上的日志表。

我想知道是否有监听 MongoDB 事件的本机方式,例如:

 - On update
 - On delete

例如,这些将类似于 Oracle DB 触发器。

4

3 回答 3

9

您可以使用名为insert. 您只需要使用或在您的数据库实例上启用复制。updateoplogmongod --mastermongod --replicaSet

Oplog 实际上是一个 capped 集合,mongodb 内部使用它来实现复制。如果您使用主/从复制,您将找到名称为 的集合oplog.$main,如果您使用的是副本集,它将被命名为oplog.rs

您可以在 oplog 上使用可尾光标,这应该可以工作。

Oplog 实际上就是日志本身。因此,您可能不需要单独存储它们以用于记录目的。但是它的大小是固定的。这意味着当其完整的旧数据被删除时。

还要确保您正在查看local数据库,这就是维护 oplog 的地方

这是来自mongoskin wiki 页面的一个工作示例

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
于 2012-09-13T11:20:35.080 回答
4

日志查看器应用程序的典型方法是使用带有上限的日志条目集合的可尾游标。

于 2012-08-05T14:38:07.740 回答
1

不,https://jira.mongodb.org/browse/SERVER-124它必须是应用程序端。

我不确定 node.js 是否在其驱动程序中内置了 MongoDB 触发器,但很可能没有,因此您需要自己编写代码。

于 2012-08-05T14:32:26.370 回答