NodeJS - MongoDB触发器

时间:2012-08-05 14:17:18

标签: node.js mongodb derbyjs

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

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

 - On update
 - On delete

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

3 个答案:

答案 0 :(得分:9)

您可以使用名为insert的特殊集合在mongodb中收听updateoplog等事件以及其他数据事件。您只需使用mongod --mastermongod --replicaSet

在数据库实例上启用复制

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

你可以在oplog上使用tailable游标,这应该可行。

Oplog实际上是记录本身。因此,您可能不需要单独存储它们以用于记录目的。但它的大小是固定的。在删除完整的旧数据时的含义。

还要确保您正在查看 local 数据库,即维护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

答案 1 :(得分:4)

日志查看器应用程序的典型方法是使用带有tailable cursor日志条目的capped collection

答案 2 :(得分:1)

不,https://jira.mongodb.org/browse/SERVER-124它必须是申请方。

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