gpt4 book ai didi

python - Pymongo - 拖尾 oplog

转载 作者:IT老高 更新时间:2023-10-28 13:14:11 27 4
gpt4 key购买 nike

我正在尝试在 mongo 的 oplog 集合上实现 pub/sub。提供的代码有效,without tailable = True 选项集(它将返回所有文档),但只要我将它传递给光标它就不会拾取任何东西(甚至在对所需集合进行更改后)。

我正在使用 pymongo 2.7.2

while(True):
with self.database.connect() as connection:
cursor = connection['local'].oplog.rs.find(
{'ns': self.collection},
await_data = True,
tailable = True
)

cursor.add_option(_QUERY_OPTIONS['oplog_replay'])

while cursor.alive:
try:
doc = cursor.next()

print doc
except(AutoReconnect, StopIteration):
time.sleep(1)

我已经尝试了一些解决方案,但是一旦添加了可尾选项,它仍然会失败。 Oplog 设置正确,因为 nodejs 中的 mongo-oplog 模块按预期工作。

可能duplicate (没有接受的答案)

最佳答案

您需要查询'ts' oplog 字段,并跟踪您阅读的最后一个文档(通过时间戳),以防必须重新创建光标。下面是一个示例,您可以根据自己的需要进行修改:

import time

import pymongo

c = pymongo.MongoClient()
# Uncomment this for master/slave.
# oplog = c.local.oplog['$main']
# Uncomment this for replica sets.
oplog = c.local.oplog.rs
first = oplog.find().sort('$natural', pymongo.DESCENDING).limit(-1).next()
ts = first['ts']

while True:
cursor = oplog.find({'ts': {'$gt': ts}}, tailable=True, await_data=True)
# oplogReplay flag - not exposed in the public API
cursor.add_option(8)
while cursor.alive:
for doc in cursor:
ts = doc['ts']
# Do something...
time.sleep(1)

关于python - Pymongo - 拖尾 oplog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30401063/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com