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

时间:2017-09-04 07:47:27

标签: python mongodb pymongo mongoengine

我使用MongoDB进行应用程序设置,在我的Python代码中,我使用mongoengine从db读取设置文档,mongoengine是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属性时自动重新加载Setting文档的方法感兴趣。在mongoengine有一个干净的方法吗?我更喜欢这样的代码,我的设置总是与db同步:

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

我已经阅读了mongoengine doc以找到一个很好的方法,我发现no_cache()方法可以用来强制Setting类返回一个非缓存的查询集。有了这个,我就更接近了:

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

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

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

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

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