2012-06-03 32 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)) 
相关问题