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

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

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



慕田峪7331174
浏览 1438回答 3
3回答

海绵宝宝撒

你所想的听起来很像触发器。MongoDB不支持任何触发器,但是有些人使用一些技巧“滚动”自己的触发器。这里的关键是橡皮筋。当您在副本集中运行MongoDB时,所有MongoDB操作都会记录到操作日志(称为oplog)。oplog基本上只是对数据所做的修改的一个运行列表。复制通过监听此oplog上的更改来设置功能,然后在本地应用这些更改。这听起来熟悉吗?我不能在这里详细描述整个过程,它是几页文档,但是您需要的工具是可用的。首先,在Oplog上写几篇文章-简要描述 - 的布局local收藏(其中包含oplog)你也会想利用可裁剪游标..这些将为您提供一种侦听更改而不是轮询更改的方法。注意,复制使用可裁剪游标,因此这是一个受支持的特性。

一只斗牛犬

因为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'])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MongoDB
Ruby