MongoEngine - 索引



已建立索引的集合可以更快地處理查詢。預設情況下,每個集合都會在 _id 欄位上自動建立索引。此外,您可以在一個或多個欄位上建立索引。

使用 Compass,我們可以非常輕鬆地構建索引。點選索引選項卡上的“建立索引”按鈕,如下圖所示:

Indexes

將出現一個對話方塊,如圖所示。選擇索引名稱、要建立索引的欄位、索引順序(升序或降序)和其他選項。

Create Indexes

在使用 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 將顯示如下所示的索引:

Value of Indexes

“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'])
廣告
© . All rights reserved.