![](/img/trans.png)
[英]MongoDB, MongoEngine: How to get Document by its EmbeddedDocument?
[英]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.