MongoEngine - 索引



已建立索引的集合可以更快地处理查询。默认情况下,每个集合都会在 _id 字段上自动建立索引。此外,您可以在一个或多个字段上创建索引。

使用 Compass,我们可以非常轻松地构建索引。点击索引选项卡上的“创建索引”按钮,如下图所示:

Indexes

将出现一个对话框,如图所示。选择索引名称、要建立索引的字段、索引顺序(升序或降序)和其他选项。

Create Indexes

在使用 MongoEngine 时,通过在文档类定义的 meta 字典中指定“indexes”键来创建索引。

indexes 属性的值是一个字段列表。在下面的示例中,我们要求 student 集合中的文档根据 name 字段建立索引。

from mongoengine import *
con=connect('mydata')
class student(Document):
   name=StringField(required=True)
   course=StringField()
   meta = {'indexes':['name']}
   
s1=student()
s1.name='Avinash'
s1.course='DataScience'
s1.save()
s2=student()
s2.name='Anita'
s2.course='WebDesign'
s2.save()

默认情况下,索引顺序为升序。可以通过在前面添加“+”表示升序或“-”表示降序来指定顺序。

要创建复合索引,请使用字段名称的元组,可以选择附加 + 或 - 符号来指示排序顺序。

在下面的示例中,student 文档类包含 name 和 course 的复合索引定义(请注意 course 字段前缀为 - 符号,这意味着索引按 name 升序和 course 降序构建)。

from mongoengine import *
con=connect('mydata')

class student(Document):
   name=StringField(required=True)
   course=StringField()
   meta = {'indexes':[('name','-course')]}

s1=student()
s1.name='Avinash'
s1.course='DataScience'
s1.save()
s2=student()
s2.name='Anita'
s2.course='WebDesign'
s2.save()

MongoDB Compass 将显示如下所示的索引:

Value of Indexes

“indexes”的值可以是包含各种选项的字典,如下所示:

fields 要索引的字段。
cls 如果 allow_inheritance 启用,您可以配置是否应自动添加 _cls 字段。
sparse 索引是否应为稀疏索引。
unique 索引是否应为唯一索引。
expireAfterSeconds 通过设置秒数来自动使集合中的数据过期
name 允许您为索引指定名称。
collation 允许创建不区分大小写的索引。

以下示例在 name 字段上创建索引,该索引在 3600 秒后过期。

from mongoengine import *
con=connect('mydata')

class student(Document):
   name=StringField(required=True)
   course=StringField()
   meta = {'indexes':[{
            'fields': ['name'],
            'expireAfterSeconds': 3600
           }
    ]
}

要指定文本索引,请在字段名前添加“$”符号;对于哈希索引,请使用“#”作为前缀。

如此指定的索引会在文档添加到集合时自动创建。要禁用自动创建,请将 meta 属性中的“auto_create_index”设置为 False。

我们有list_indexes()方法,它与 Document 类一起使用,可以显示可用索引的列表。

print (student.list_indexes())

[[('name', 1)], [('_id', 1)]]

要在 meta 字典中不存在的字段上创建索引,请使用create_index()方法。以下代码将在 course 字段上创建索引:

class student(Document):
name=StringField(required=True)
course=StringField()
meta = {'indexes':[{
          'fields': ['name'],
          'expireAfterSeconds': 3600
        }
]}
student.create_index(['course'])
广告