Mongoengine 简明教程
MongoEngine - Indexes
索引的集合导致更快的查询处理。默认情况下,每个集合都自动在 _id
字段上建立索引。此外,您可以在一个或多个字段上创建索引。
使用 Compass,我们可以非常轻松地构建索引。单击下图所示的 Indexes 选项卡上的 CREATE INDEX 按钮:
将出现一个如所示的对话框。选择索引的名称、要建立索引的字段、索引的顺序(升序或降序)和其他选项。
在使用 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 将如下所示显示索引 -
“索引”的值可能是各种选项的字典,如下所示:
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'])