Как MongoEngine обрабатывает индексы (создание, обновление, удаление)? - PullRequest
5 голосов
/ 13 октября 2011

Лучший вопрос о настройке индексов Монго. Mongoengine, оболочка Python ORM, позволяет устанавливать индексы в метаклассе Document.

Когда этот метакласс исследуется и добавляется индекс? Могу ли я создать коллекцию с помощью класса Document mongoengine, а затем добавить индекс по факту?

Если я удаляю индекс из метакласса, автоматически ли удаляется индекс из соответствующей коллекции?

Спасибо,

Ответы [ 2 ]

4 голосов
/ 31 января 2012

Вы можете добавить индекс в любое время, и ensureIndex будет вызван за кулисами, поэтому он будет добавлен, если он не существует.

Если вы удалите индекс из мета - вы будетеДля удаления индекса нужно использовать pymongo или shell.

1 голос
/ 08 марта 2017

MongoEngine предоставляет программную конструкцию для поддержки всех индексов из вашего приложения на Python. Он использует метаданные в классе коллекции для определения всех ваших индексов. Вот пример

class User(Document):
    meta = {        
    'indexes': [
    {
         'fields': ['+name']                   
    },
    {
         'fields': ['#email']
    }]             
}

Класс User, определенный выше, объявляет два индекса: 1. name (порядок сортировки) и 2. email (хэшированный). MongoEngine создает каждый объявленный индекс при первой операции upsert. Эти индексы создаются в коллекции с помощью вызова createIndex / sureIndex. MongoEngine пытается создавать эти индексы каждый раз, когда документ вставляется в коллекцию.

...