Как создать уникальный и составной индекс для модели django, используя mon go db - PullRequest
0 голосов
/ 07 января 2020

Я использую djangi и создал одну модель Person с несколькими полями и хочу реализовать индексирование для получения эффективных результатов.

Я выполнил индексацию на SQL, но с mongoengine я делаю в первый раз. Я застрял на том, как реализовать уникальный индекс для столбца name, а также как реализовать составной индекс для полей phone_number and email.

Спасибо за помощь

from mongoengine import Document, fields


class MongoDocument(object):
    def __unicode__(self):
        return unicode_class(self)

    def to_dict(self):
        return convert_to_dict(self)

class Person(Document, MongoDocument):
    name = fields.StringField(max_length=250)
    phone_number = fields.StringField(max_length=10)
    email = fields.StringField(max_length=250)
    active = fields.BooleanField(default=True)

1 Ответ

0 голосов
/ 07 января 2020

Если вам нужна только уникальность, вы можете использовать index=True в определении поля (например, name = fields.StringField(max_length=250, unique=True)). Если вам нужен составной индекс или более необычное определение индекса, вы можете передать определение индекса атрибуту meta, как описано в соответствующем MongoEngine do c. Ниже приведен пример из официальной do c

class Page(Document):
    category = IntField()
    title = StringField()
    rating = StringField()
    created = DateTimeField()
    meta = {
        'indexes': [
            'title',
            '$title',  # text index
            '#title',  # hashed index
            ('title', '-rating'),
            ('category', '_cls'),
            {
                'fields': ['created'],
                'expireAfterSeconds': 3600
            }
        ]
    }
...