MongoEngine - 索引
索引集合可以更快地处理查询。 默认情况下,每个集合都会自动在 _id 字段上建立索引。 此外,您可以在一个或多个字段上创建索引。
使用Compass,我们可以很容易的建立索引。 单击 Indexes 选项卡上的 CREATE INDEX 按钮,如下图所示 −
出现如图所示的对话框。 选择索引名称、索引字段、索引顺序(升序或降序)和其他选项。
在使用 MongoEngine 时,通过在文档类定义的元字典中指定"indexes"键来创建索引。
索引属性的值是一个字段列表。 在下面的示例中,我们要求根据 name 字段对 student 集合中的文档进行索引。
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()
默认的索引顺序是升序。 可以通过在升序前加"+"或降序前加"-"来指定顺序。
要创建复合索引,请使用字段名称的元组,可选择附加 + 或 – 符号以指示排序顺序。
在以下示例中,学生文档类包含名称和课程复合索引的定义(注意 - 课程字段前的符号,这意味着索引是按名称升序和课程降序构建的。
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 将显示索引如下 −
'indexes'的值可能是一个包含各种选项的字典,如下所示 −
fields | 要索引的字段。 |
cls | 如果开启allow_inheritance,可以配置索引是否自动添加_cls字段。 |
sparse | 索引是否稀疏 |
unique | 索引是否唯一 |
expireAfterSeconds | 通过设置时间(以秒为单位)自动使集合中的数据过期 |
name | 允许您为索引指定名称 |
collation | 允许创建不区分大小写的索引 |
以下示例在 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。
我们有 list_indexes() 方法和显示可用索引列表的 Document 类。
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'])