3 min read 按此留言

Azure MongoDB 無法排序問題

Azure MongoDB 無法排序問題

筆者因工作上的需要大量使用Azure 服務,也踩過很多的雷。而常用的服務有CosmosDB、Api Management、App Service...等等。本次跟大家分享,在使用Azure 上需要注意的事情。

CosmosDB

簡介

簡單介紹一下CosmosDB,所提供的服務。官方文件連結在此
CosmonDB就是給你一個空間,你想要實作什麼樣的資料庫都可以。包含NoSQL、SQL、Graph...等等。
筆者自己熟悉的內容是Azure實作的Api for MongoDB,簡單的說就是CosmosDB的外面包一層MongoDB,讓使用者可以透過mongo的語法進行資料儲存與讀取。也因為這樣Api的介面,會有一些內容是不支援的。

無法排序的錯誤訊息

再進行find語法的同時,我們會需要利用index索引來加速我們的搜尋速度,以及利用特定欄位來進行排序。
但是,cosmosDB在實作Api for MongoDB時,他強迫你必須將你要排序的key加入index內才可以進行排序。

下圖是筆者使用MongoDB Compass,進入我的天氣預報的Collection。

Azure mongoDB compass find

這時如果我還沒有在Azure 上設定index 時,就會發生以下錯誤

mongoDB Compass use sort error
 Reason: (Message: {"Errors":["The index path corresponding to the specified order-by item is excluded."]}
  RequestStats: Please see CosmosDiagnostics, SDK: Windows/10.0.17763 cosmos-netstandard-sdk/3.3.2);););

以上擷取當中的兩句話

"The index path corresponding to the specified order-by item is excluded."
這個相應的索引路徑並沒有被指定是可以進行order-by的項目
"Please see CosmosDiagnostics"
請查一下Cosmos

因此我們為了要達到可以進行索引的需求,我們必須將modifyTime加入index。

Step 1. 進入CosmosDB | Data Explorer

Azure CosmosDB

Step 2. 點擊您的Collection / Settings,進入Settings 頁面。

Azrure CosmosDB Data Explorer Settings

Step 3. 點擊Indexing Policy,在下方表格填入你需要進行排序的key,並且選擇"Single Field"

Azure CosmosDB MongoDB index policy

Step 4. 別忘了按下儲存。

接著我們回到MongoDB Compass 的介面。在按下FIND,就可以正常執行了。

以上是筆者本次的分享,希望可以幫助到在使用CosmosDB的朋友們一些幫助。

謝謝大家耐心地閱讀!!希望大家在看到此篇文章後可以訂閱,並且花個5分鐘幫我填寫下問卷,讓我更有動力!!!
問卷網址如下https://forms.gle/iVmPmnvJW22bpxbc8