2012-06-03 37 views
0

我想檢查是否已經有一個項目與當前日期,如果不是,我會添加它。下面的代碼沒有提示任何錯誤,但正如我在評論中提及上面它不保存任何東西的MongoDB如何使用MongoEngine將更多項添加到EmbeddedDocument中?

if len(site.DaylyLog) != 0: 
    print len(site.DaylyLog) 
    print site.DaylyLog[-1] 
    current_date_daylylog = site.DaylyLog[-1]['aggregate_date'] 
else: 
    current_date_daylylog = '' 

if current_date_daylylog == datetime.date.today(): 
    #update document 
    print current_date_daylylog 
    print "calculating averages" 

    site.DaylyLog[-1].average_response_time = (site.DaylyLog[-1].average_response_time+record_uptime.response_time)/2 
    site.DaylyLog[-1].average_uptime = (site.DaylyLog[-1].average_uptime+100)/2 

    site.save() 
else: 
    print current_date_daylylog 
    print "adding new uptime" 

    print site.url 
    aggregate_uptime = AggregatedUptime() 
    aggregate_uptime.average_response_time = record_uptime.response_time 
    aggregate_uptime.average_uptime = 100 
    aggregate_uptime.total_downtime = 0 
    aggregate_uptime.aggregate_date = datetime.date.today() 

    print aggregate_uptime.aggregate_date 
    print aggregate_uptime.average_response_time 

    site.DaylyLog.append(aggregate_uptime) 
    site.save() 

    print site.DaylyLog[-1].aggregate_date 
+1

可你也張貼您的模型? – dm03514

+0

非常感謝。碰巧問題是我改變了模型中的參考,並忘記改變視圖。 :-) – gawry

+0

你是否運行這個多線程?是否有多個線程會嘗試更新同一文檔的問題? –

回答

0

。我發佈的代碼是可以的,但是它正在恢復我在模型中改變的內容。這只是一個新手問題。 :-)

老模特是

class Checkr(Document): 
name = StringField() 
slug = SlugField() 
url = URLField() 
frequency = IntField() 
owner = IntField() 
start_date = DateTimeField() 
end_date = DateTimeField() 
current_response_time = FloatField() 
current_response_code = IntField() 
hourly_log = ListField(EmbeddedDocumentField(AggregatedUptime)) 
dayly_log = ListField(EmbeddedDocumentField(AggregatedUptime)) 
weekly_log = ListField(EmbeddedDocumentField(AggregatedUptime)) 

當它應該是

class Checkr(Document): 
name = StringField() 
slug = SlugField() 
url = URLField() 
frequency = IntField() 
owner = IntField() 
start_date = DateTimeField() 
end_date = DateTimeField() 
current_response_time = FloatField() 
current_response_code = IntField() 
HourlyLog = ListField(EmbeddedDocumentField(AggregatedUptime)) 
DaylyLog = ListField(EmbeddedDocumentField(AggregatedUptime)) 
WeeklyLog = ListField(EmbeddedDocumentField(AggregatedUptime)) 
相關問題