2017-09-04 55 views
0

我正在使用MongoDB進行應用程序設置,並且在我的Python代碼中,我使用mongoengine讀取了設置文檔,這是用於pymongo的高級包裝器。 我能夠每次都重新加載該文件訪問它的屬性是這樣的(假設有在設置在MongoDB中收集的文件):如何在訪問屬性時自動重載pongongo或mongoengine中的MongoDB文檔?

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 DOC更多了一下,找到一個很好的方式,我已經找到no_cache()方法,其可用於強制Setting類返回一個非緩存查詢集。有了這個,我有點接近了:

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

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

任何想法?

謝謝

回答

0

你可以寫一個自定義的方法來做到這一點。 僞代碼:

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

謝謝你的建議。但我試圖找到一種更乾淨的方式,因爲我必須在我的代碼中隨處使用這個設置文檔,並調用諸如get_reloaded_attr(setting,'log_level')的函數是冗長且間接的。 –

相關問題