MongoEngine – 索引

MongoEngine – 索引

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

使用Compass,我们可以非常容易地建立索引。点击索引标签上的CREATE INDEX按钮,如下图所示

MongoEngine - 索引

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

MongoEngine - 索引

当使用MongoEngine时,索引是通过在Document类定义的元字典中指定’indexes’键来创建。

indexes属性的值是一个字段的列表。在下面的例子中,我们要求根据姓名字段对学生集合中的文档进行索引。

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将显示索引,如下图所示

MongoEngine - 索引

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。

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

print (student.list_indexes())

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

要在一个不在元字典中的字段上创建索引,请使用 create_index() 方法。下面的代码将在课程字段上创建索引 —

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程