我想从mongoDB实时或接近实时读取数据(来自一个集合的文档),并将其转换为pandas数据框以供进一步分析。
我知道如何从mongoDB获取数据到python但是,我想保持连接打开,以便每当有新数据进入时,我都会用Python进行实时分析。
client = MongoClient('localhost', 27017)
db = client.test_insert
collection = db.dataset
df = pd.DataFrame(list(db.dataset.find().limit(1)))
请帮助:)
答案 0 :(得分:0)
您可以将收藏集转换为capped collection,以便tailable cursors可用。但请注意这有其他影响(整个集合的固定大小以字节为单位,当超出旧文档的大小被删除时,无法更新文档大小)。
如果您不想限制收藏,那么您也可以创建a tailable cursor on the oplog collection。这样,您的应用程序将不断更新副本集上的所有更改。您只需要过滤掉您不感兴趣的那些集合的更新。
答案 1 :(得分:0)
如果您的查询位于索引字段上,则不应使用tailable游标,而应使用常规游标。您可以在Python中跟踪索引字段的最后一个值,也可以在MongoDB中更灵活地跟踪索引字段的最后一个值。然后,您可以使用无限循环来查询任何新记录:
db.<collection>.find( { indexedField: { $gt: <lastvalue> } } )
根据数据框分析的复杂程度,您可能需要调查是否应添加RabbitMQ之类的工作队列。此设计允许一个进程将MongoDB中的新记录推送到消息队列,并允许多个进程处理该队列上的传入消息。