Python 在访问其属性时,如何在pymongo或mongoengine中自动重新加载MongoDB文档?
我使用MongoDB进行应用程序设置,在我的Python代码中,我使用mongoengine(pymongo的高级包装器)从db中读取了设置文档。 每次访问文档的属性时,我都可以像这样重新加载文档(假设MongoDB中的Setting collection中有一个文档): 但是,我感兴趣的是一种方法,可以使设置文档在每次访问日志级别属性时自动重新加载。在mongoengine中有没有一种干净的方法可以做到这一点?我更喜欢这样的代码,并且我的设置始终与db同步:Python 在访问其属性时,如何在pymongo或mongoengine中自动重新加载MongoDB文档?,python,mongodb,pymongo,mongoengine,Python,Mongodb,Pymongo,Mongoengine,我使用MongoDB进行应用程序设置,在我的Python代码中,我使用mongoengine(pymongo的高级包装器)从db中读取了设置文档。 每次访问文档的属性时,我都可以像这样重新加载文档(假设MongoDB中的Setting collection中有一个文档): 但是,我感兴趣的是一种方法,可以使设置文档在每次访问日志级别属性时自动重新加载。在mongoengine中有没有一种干净的方法可以做到这一点?我更喜欢这样的代码,并且我的设置始终与db同步: ... while True:
...
while True:
time.sleep(1)
print(setting.log_level)
为了找到一个好的方法,我读了更多的mongoengine文档,但没有发现可以用来强制设置类返回非缓存查询集的\u cache()方法。有了这个,我更接近了:
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)
谢谢你的建议。但我正试图找到一种更简洁的方法,因为我必须在代码中的任何地方使用此设置文档,并且调用诸如get_reloated_attr(设置“log_level”)之类的函数都是冗长和间接的。
def get_reloaded_attr(obj,attr):
obj.reload()
return getattr(obj,attr)