问题:项目里操作记录表(mongodb)非常大,现在需要结合这个表进行一些业务统计,要求在插入记录时进行分析。
解决方法:利用信号量,定义insert和create时调用。 参考: https://blog.csdn.net/sun754276603/article/details/49180661
eg:
from mongoengine import signals class UploadRecord(Document): shop_id = IntField(verbose_name="店铺ID", required=True) campaign_id = IntField(verbose_name="计划ID") ... 字段定义...... @classmethod def post_bulk_insert(cls, *args, **kwargs): """当批量插入到操作记录表后,执行处理,对应的方法eg:UploadRecord.objects.insert(rcd_list)""" print "post_bulk_insert: %s" % ("*" * 30) document_list = kwargs.get('documents', []) for doc in document_list: print doc.shop_id, doc.item_name, len(doc.detail_list) @classmethod def post_save(cls, sender, document, **kwargs): """当保存数据时到操作记录表时,执行处理,对应的方法eg: UploadRecord.objects.create(**rcd_dict)""" print "Post Save: %s" % ("1" * 30) print document.shop_id, document.item_name, len(document.detail_list) # 定义信号量,当mongodb的数据发生改变时执行方法 signals.post_bulk_insert.connect(UploadRecord.post_bulk_insert, sender=UploadRecord) signals.post_save.connect(UploadRecord.post_save, sender=UploadRecord)