Mongoengine 简明教程

MongoEngine - Indexes

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

使用 Compass,我们可以非常轻松地构建索引。单击下图所示的 Indexes 选项卡上的 CREATE INDEX 按钮:

indexes

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

create indexes

在使用 MongoEngine 时,索引是通过指定 Document 类定义的元数据中的“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 文档类包含对名称和课程的复合索引的定义(注意 - 以课程字段为前缀的符号,表示索引按名称升序和课程降序构建。

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

“索引”的值可能是各种选项的字典,如下所示:

fields

The fields to index.

cls

如果允许继承已启用,则可以配置是否应自动添加 _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
           }
    ]
}

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

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

我们有带有 Document 类的方法 list_indexes() ,它显示可用索引的列表。

print (student.list_indexes())

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

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

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