У меня есть следующая модель:
class MyModel(mongoengine.Document):
timestamp = fields.DateTimeField(required=True)
field1 = fields.StringField(required=True)
field2 = fields.StringField(required=True)
meta = {'indexes': [{'fields': ['field1', 'timestamp'], 'unique': True}]}
Для field1
может быть только одна запись в день.Если есть новая запись для того же дня, но позже, запись должна быть обновлена.Вот почему у меня это DateTimeField
, а не DateField
, так как мне нужна информация о времени, чтобы иметь возможность сравнивать.Но это решение не выдает NotUniqueError
для отметок времени, если они не равны секундам.Для моих целей мне нужно, чтобы он выдавал NotUniqueError
, когда только часть даты равна.
Я пытался реализовать это решение:
class MyModel(mongoengine.Document):
date = fields.DateField(required=True)
timestamp = fields.DateTimeField(required=True)
field1 = fields.StringField(required=True)
field2 = fields.StringField(required=True)
meta = {'indexes': [{'fields': ['field1', 'date'], 'unique': True}]}
В этой реализации NotUniqueError
выбрасывается, когдатолько дата без времени равна, что я и хочу, но это не элегантно.
Есть ли способ для меня реализовать первую версию, но заставить индексы работать так, как мне нужно?