Уникальность над полем datetime в mongoengine - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть следующая модель:

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 выбрасывается, когдатолько дата без времени равна, что я и хочу, но это не элегантно.

Есть ли способ для меня реализовать первую версию, но заставить индексы работать так, как мне нужно?

...