MongoEngine 如何处理索引(创建、更新、删除)?

8 投票
2 回答
3280 浏览
提问于 2025-04-17 04:16

关于设置Mongo索引的最佳实践问题。Mongoengine是一个Python的ORM工具,它可以让你在文档的元类中设置索引。

这个元类是什么时候被检查的,索引又是什么时候被添加的?我可以先通过mongoengine的文档类创建一个集合,然后再事后添加索引吗?

如果我从元类中移除索引,那个对应的集合里的索引会自动被删除吗?

谢谢,

2 个回答

2

MongoEngine 提供了一种编程方式,可以让你在 Python 应用程序中管理所有的索引。它使用集合类上的元数据来定义你所有的索引。下面是一个例子:

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

上面定义的 User 类声明了两个索引:1. name(排序顺序)和 2. email(哈希值)。MongoEngine 会在第一次进行插入或更新操作时创建每个声明的索引。这些索引是通过 createIndex/ensureIndex 调用在集合上创建的。每当有文档插入到集合中时,MongoEngine 都会尝试创建这些索引。

7

你可以随时添加一个索引,系统会自动调用 ensureIndex,如果这个索引还不存在,它就会被添加上。

如果你从元数据中删除了一个索引,你就需要用 pymongo 或者命令行工具来手动删除这个索引。

撰写回答