繁体   English   中英

访问其属性时,如何在pymongo或mongoengine中自动重新加载MongoDB文档?

[英]How to automatically reload a MongoDB document in pymongo or mongoengine when accessing its attributes?

我正在使用MongoDB进行应用程序设置,并且在我的Python代码中,我使用mongoengine从db中读取了设置文档,该文件是pymongo的高级包装。 每次访问这样的属性时,我都可以重新加载文档(假设MongoDB中的Setting集合中有一个文档):

import time
import mongoengine

class Setting(mongoengine.Document):
    log_level = mongoengine.StringField(default='info')

setting = Setting.objects[0]
while True:
    time.sleep(1)
    setting.reload()
    print(setting.log_level)

但是,我对使每次访问log_level属性时自动重新加载“设置”文档的方法感兴趣。 mongoengine中有没有一种干净的方法可以做到这一点? 我更喜欢这样的代码,并且我的设置始终与db同步:

...
while True:
    time.sleep(1)
    print(setting.log_level)

我阅读了更多的mongoengine文档,以找到一种不错的方法,并且找到了no_cache()方法,该方法可用于强制Setting类返回非缓存的查询集。 有了这个,我就更近了:

def get_setting():
    return Setting.objects.no_cache()[0] 

while True:
    time.sleep(1)
    print(get_setting().log_level)

任何想法?

谢谢

您可以编写一个自定义方法来执行此操作。 伪代码:

def get_reloaded_attr(obj,attr):
    obj.reload()
    return getattr(obj,attr)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM