为了账号安全,请及时绑定邮箱和手机立即绑定

如何侦听对MongoDB集合的更改?

如何侦听对MongoDB集合的更改?

慕田峪7331174 2019-07-01 16:19:56
如何侦听对MongoDB集合的更改?我正在创建一个以MongoDB为数据存储区的后台作业队列系统。在生成工作人员处理作业之前,我如何“侦听”对MongoDB集合的插入?我是否需要每隔几秒钟轮询一次,看看上次是否有任何更改,还是我的脚本可以等待插入发生?这是一个PHP项目,我正在做,但请用Ruby或语言不可知论的语言回答。
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

你所想的听起来很像触发器。MongoDB不支持任何触发器,但是有些人使用一些技巧“滚动”自己的触发器。这里的关键是橡皮筋。

当您在副本集中运行MongoDB时,所有MongoDB操作都会记录到操作日志(称为oplog)。oplog基本上只是对数据所做的修改的一个运行列表。复制通过监听此oplog上的更改来设置功能,然后在本地应用这些更改。

这听起来熟悉吗?

我不能在这里详细描述整个过程,它是几页文档,但是您需要的工具是可用的。

首先,在Oplog上写几篇文章-简要描述 - 的布局local收藏(其中包含oplog)

你也会想利用可裁剪游标..这些将为您提供一种侦听更改而不是轮询更改的方法。注意,复制使用可裁剪游标,因此这是一个受支持的特性。


查看完整回答
反对 回复 2019-07-01
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

因为MongoDB3.6将有一个名为ChangeStreams的新通知API,您可以使用它。看见这篇博文是一个例子..例如:

cursor = client.my_db.my_collection.changes([
    {'$match': {
        'operationType': {'$in': ['insert', 'replace']}
    }},
    {'$match': {
        'newDocument.n': {'$gte': 1}
    }}])# Loops forever.for change in cursor:
    print(change['newDocument'])


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 1437 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信