- MongoEngine 教程
- MongoEngine - 首頁
- MongoEngine - MongoDB
- MongoEngine - MongoDB Compass
- MongoEngine - 物件文件對映器 (Object Document Mapper)
- MongoEngine - 安裝
- MongoEngine - 連線到 MongoDB 資料庫
- MongoEngine - 文件類
- MongoEngine - 動態模式
- MongoEngine - 欄位
- MongoEngine - 新增/刪除文件
- MongoEngine - 查詢資料庫
- MongoEngine - 過濾器
- MongoEngine - 查詢運算子
- MongoEngine - QuerySet 方法
- MongoEngine - 排序
- MongoEngine - 自定義 QuerySet
- MongoEngine - 索引
- MongoEngine - 聚合
- MongoEngine - 高階查詢
- MongoEngine - 文件繼承
- MongoEngine - 原子更新
- MongoEngine - Javascript
- MongoEngine - GridFS
- MongoEngine - 訊號
- MongoEngine - 文字搜尋
- MongoEngine - 擴充套件
- MongoEngine 有用資源
- MongoEngine - 快速指南
- MongoEngine - 有用資源
- MongoEngine - 討論
MongoEngine - 索引
已建立索引的集合可以更快地處理查詢。預設情況下,每個集合都會在 _id 欄位上自動建立索引。此外,您可以在一個或多個欄位上建立索引。
使用 Compass,我們可以非常輕鬆地構建索引。點選索引選項卡上的“建立索引”按鈕,如下圖所示:
將出現一個對話方塊,如圖所示。選擇索引名稱、要建立索引的欄位、索引順序(升序或降序)和其他選項。
在使用 MongoEngine 時,透過在文件類定義的 meta 字典中指定“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 文件類包含 name 和 course 的複合索引定義(請注意 course 欄位字首為 - 符號,這意味著索引按 name 升序和 course 降序構建)。
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 | 允許建立不區分大小寫的索引。 |
以下示例在 name 欄位上建立索引,該索引在 3600 秒後過期。
from mongoengine import *
con=connect('mydata')
class student(Document):
name=StringField(required=True)
course=StringField()
meta = {'indexes':[{
'fields': ['name'],
'expireAfterSeconds': 3600
}
]
}
要指定文字索引,請在欄位名前新增“$”符號;對於雜湊索引,請使用“#”作為字首。
如此指定的索引會在文件新增到集合時自動建立。要停用自動建立,請將 meta 屬性中的“auto_create_index”設定為 False。
我們有list_indexes()方法,它與 Document 類一起使用,可以顯示可用索引的列表。
print (student.list_indexes())
[[('name', 1)], [('_id', 1)]]
要在 meta 字典中不存在的欄位上建立索引,請使用create_index()方法。以下程式碼將在 course 欄位上建立索引:
class student(Document):
name=StringField(required=True)
course=StringField()
meta = {'indexes':[{
'fields': ['name'],
'expireAfterSeconds': 3600
}
]}
student.create_index(['course'])