我创建了一个MongoDB数据库,并且正在向其中发送数据。同时,我正在运行一个Python脚本来从该数据库中获取数据。我希望我的脚本在将新条目推送到数据库后立即将其打印到控制台,但是我不知道该如何完成。
这是我目前的工作,但我不喜欢它,因为每次它都会在db上打印整个数据,即使我只希望在更新后立即输入最后一个条目/条目即可。
from pymongo import MongoClient
import time
import random
from pprint import pprint
client = MongoClient(port=27017)
arr = []
db = client.one
mycol = client["coll"]
while True:
cursor = db.mycol.find()
for document in cursor:
print(document['num'])
time.sleep(2)
我该如何解决?
答案 0 :(得分:5)
从3.6版开始,Mongo DB支持功能调用“更改流”。在documentation中,您将找到以下简单的Python示例:
cursor = db.inventory.watch()
document = next(cursor)
如果光标支持next()
,那么您还应该可以在循环,生成器甚至asyncio
中使用它。
答案 1 :(得分:3)
有几种方法可以解决此问题,但最简单的方法可能是存储自动递增的“ primaryKey”(或插入时间戳或其他内容),并仅打印该键之后的结果。这是一个简单的示例来演示:
# we start at one...
highest_previous_primary_key = 1
while True:
cursor = db.mycol.find()
for document in cursor:
# get the current primary key, and if it's greater than the previous one
# we print the results and increment the variable to that value
current_primary_key = document['primaryKey']
if current_primary_key > highest_previous_primary_key:
print(document['num'])
highest_previous_primary_key = current_primary_key
time.sleep(2)
这也许是最懒的做法。但除此之外,您可以尝试执行以下操作: