- Mongo引擎教程
- MongoEngine - 主页
- MongoEngine——MongoDB
- MongoEngine - MongoDB 指南针
- MongoEngine - 对象文档映射器
- MongoEngine - 安装
- MongoEngine - 连接到 MongoDB 数据库
- MongoEngine - 文档类
- MongoEngine - 动态模式
- MongoEngine - 字段
- MongoEngine - 添加/删除文档
- MongoEngine - 查询数据库
- MongoEngine - 过滤器
- MongoEngine - 查询运算符
- MongoEngine - 查询集方法
- MongoEngine - 排序
- MongoEngine - 自定义查询集
- MongoEngine - 索引
- MongoEngine - 聚合
- MongoEngine - 高级查询
- MongoEngine - 文档继承
- MongoEngine - 原子更新
- MongoEngine-Javascript
- MongoEngine-GridFS
- MongoEngine - 信号
- MongoEngine - 文本搜索
- MongoEngine - 扩展
- MongoEngine 有用资源
- MongoEngine - 快速指南
- MongoEngine - 有用的资源
- MongoEngine - 讨论
MongoEngine - 索引
索引集合可以加快查询处理速度。默认情况下,每个集合都会自动在 _id 字段上建立索引。此外,您可以在一个或多个字段上创建索引。
使用Compass,我们可以非常轻松地建立索引。单击“索引”选项卡上的“创建索引”按钮,如下图所示 -
将出现一个对话框,如图所示。选择索引名称、要索引的字段、索引顺序(升序或降序)和其他选项。
使用 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 将显示索引如下 -
“索引”的值可能是各种选项的字典,如下所示 -
领域 | 要索引的字段。 |
CLS | 如果allow_inheritance打开,您可以配置索引是否应该自动添加_cls字段。 |
疏 | 索引是否应该稀疏。 |
独特的 | 索引是否应该是唯一的。 |
秒后过期 | 通过设置时间(以秒为单位)自动使集合中的数据过期 |
姓名 | 允许您指定索引的名称 |
整理 | 允许创建不区分大小写的索引 |
以下示例在名称字段上创建索引,该索引将在 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'])