如何使用python

时间:2015-12-03 16:12:18

标签: python mongodb pandas pymongo

我想从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)))

请帮助:)

2 个答案:

答案 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中的新记录推送到消息队列,并允许多个进程处理该队列上的传入消息。