針對適用於 MongoDB 的 Azure Cosmos DB API 常見問題進行疑難排解
適用於: MongoDB
下列文章描述使用 Azure Cosmos DB for MongoDB 進行部署時常見的錯誤和解決方案。
注意
Azure Cosmos DB 沒有裝載 MongoDB 引擎。 它提供 MongoDB 有線通訊協定 4.0、3.6 版的實作,以及對舊版有線通訊協定 3.2 版的支援。 因此,其中部分錯誤只會在適用於 MongoDB 的 Azure Cosmos DB API 中出現。
常見錯誤和解決方案
程式碼 | 錯誤 | 描述 | 解決方法 |
---|---|---|---|
2 | BadValue | 一個常見原因是與指定的排序依據項目對應的索引路徑已遭到排除,或排序依據查詢沒有可從中提供服務的對應複合式索引。 查詢針對未編製索引的欄位要求排序。 | 將嘗試為排序查詢建立相符的索引 (或複合式索引)。 |
2 | 交易不在使用中 | 多文件交易已超過固定的 5 秒時間限制。 | 請重試多文件交易或限制多文件交易內的作業範圍,使其在 5 秒的時間限制內完成。 |
9 | FailedToParse | 表示 Cosmos DB 伺服器無法解譯或處理參數,因為提供的輸入不符合預期或支援的格式。 | 請確定查詢中只包含有效且支持的參數。 |
13 | 未經授權 | 要求缺少完成作業的權限。 | 請確定您使用的是正確的索引鍵。 |
26 | NamespaceNotFound | 找不到在查詢中參考的資料庫或集合。 | 請確定您的資料庫/集合名稱完全符合查詢中的名稱。 |
50 | ExceededTimeLimit | 要求已超過執行的逾時值 (60 秒)。 | 許多原因都可能造成此錯誤。 其中一個原因是目前配置的要求單位容量不足,而無法完成要求。 這可以藉由增加該集合或資料庫的要求單位來解決。 在其他情況下,此錯誤可藉由將大型要求分割成較小的要求來解決。 重試已收到此錯誤的寫入作業,可能會導致重複寫入。 如果您要嘗試刪除大量資料,而不影響 RU: - 請考慮使用 TTL (根據時間戳記):使用 Azure Cosmos DB 適用於 MongoDB 的 API 讓資料過期 - 使用資料指標/批次大小執行刪除。 您一次可以提取單一文件並透過迴圈予以刪除。 這可協助您在不影響生產應用程式的情況下刪除資料。 |
61 | ShardKeyNotFound | 要求中的文件未包含集合的分區索引鍵 (Azure Cosmos DB 分割區索引鍵)。 | 請確定要求會使用集合的分區索引鍵。 |
66 | ImmutableField | 要求嘗試變更不可變的欄位 | "_id" 欄位是不可變的。 請確定您的要求不會嘗試更新該欄位或分區索引鍵欄位。 |
67 | CannotCreateIndex | 無法完成建立索引的要求。 | 最多可以在容器中建立 500 個單一欄位索引。 複合索引中最多可包含八個欄位 (3.6+ 版本支援複合索引)。 |
112 | WriteConflict | 多文件交易失敗,因為有衝突的多文件交易 | 請重試多文件交易,直到成功為止。 |
115 | CommandNotSupported | 不支援所嘗試的要求。 | 錯誤中應該會提供其他詳細資料。 如果這項功能對您的部署而言很重要,請在 Azure 入口網站中建立支援票證,Azure Cosmos DB 小組會與您連絡。 |
11000 | DuplicateKey | 您要插入之文件的分區索引鍵 (Azure Cosmos DB 分割區索引鍵) 已存在於集合中,或已違反唯一索引欄位條件約束。 | 使用 update() 函式來更新現有的文件。 如果違反了唯一索引欄位條件約束,請使用尚不存在於分區/分割區中的欄位值來插入或更新文件。 另一個選項是使用包含識別碼和分區索引鍵欄位組合的欄位。 |
16500 | TooManyRequests | 取用的要求單位總數已超過針對集合佈建的要求單位率並已進行節流。 | 請考慮從 Azure 入口網站調整指派給容器或容器集的輸送量,或重試作業。 如果您啟用 SSR (伺服器端重試),Azure Cosmos DB 會自動重試因發生此錯誤而失敗的要求。 |
16501 | ExceededMemoryLimit | 做為多租用戶服務,作業已超出用戶端的記憶體配額。 這僅適用於 Azure Cosmos DB for MongoDB 3.2 版。 | 透過更嚴格的查詢準則來縮小作業的範圍,或經由 Azure 入口網站連絡支援人員。 範例: db.getCollection('users').aggregate([{$match: {name: "Andy"}}, {$sort: {age: -1}}])) |
40324 | 無法辨識的管線階段名稱。 | 無法辨識彙總管線要求中的階段名稱。 | 請確定您的要求中所有的彙總管線名稱都是有效的。 |
- | MongoDB 線路版本問題 | 舊版 MongoDB 驅動程式無法偵測到連接字串中的 Azure Cosmos DB 帳戶名稱。 | 在連接字串的結尾附加 appName=@accountName@ ,其中 accountName 是您的 Azure Cosmos DB 帳戶名稱。 |
- | MongoDB 用戶端網路問題 (例如通訊端或 endOfStream 例外狀況) | 網路要求失敗。 這通常是由於 MongoDB 用戶端嘗試使用的非使用中 TCP 連線所導致。 MongoDB 驅動程式通常會使用連線共用,而這會導致從正用於要求的集區中選擇隨機連線。 非使用中連線通常會在四分鐘後於 Azure Cosmos DB 端逾時。 | 您可以在應用程式程式碼中重試這些失敗的要求,將您的 MongoDB 用戶端 (驅動程式) 設定變更為在四分鐘的逾時時間範圍之前清除非使用中的 TCP 連線,或設定您的作業系統 keepalive 設定,使 TCP 連線維持作用中狀態。若要避免連線訊息,您可以變更連接字串,將 maxConnectionIdleTime 設為 1-2 分鐘。- Mongo 驅動程式:設定 maxIdleTimeMS=120000 - Node.JS:設定 socketTimeoutMS=120000 、autoReconnect = true、keepAlive = true、keepAliveInitialDelay = 3 分鐘 |
- | Mongo 殼層無法在 Azure 入口網站中運作 | 當使用者嘗試開啟 Mongo 殼層時不會有任何反應,且索引標籤會保持空白。 | 查看防火牆。 在 Azure 入口網站中不支援將防火牆用於 Mongo 殼層。 - 在防火牆規則內的本機電腦上安裝 Mongo 殼層 - 使用舊版 Mongo 殼層 |
- | 無法連線至連接字串 | 從 3.2 升級至 3.6 版時,連接字串已變更 | 使用適用於 MongoDB 的 Azure Cosmos DB API 帳戶時,3.6 版帳戶會具有 *.mongo.cosmos.azure.com 格式的端點,而 3.2 版帳戶則具有 *.documents.azure.com 格式的端點。 |
下一步
- 了解如何使用 Studio 3T 搭配 Azure Cosmos DB 適用於 MongoDB 的 API。
- 了解如何使用 Robo 3T 搭配 Azure Cosmos DB 適用於 MongoDB 的 API。
- 使用 Azure Cosmos DB 適用於 MongoDB 的 API 瀏覽 Cosmos DB 範例。