MongoDB (版本 2)
透過 MongoDB 連接器,您可以在 MongoDB 資料庫中執行插入、刪除、更新及讀取作業。
支援的版本
- MongoDB 3.6 至 6.1 版
- 部署在 Google Cloud 的 Mongo Atlas。
事前準備
使用 MongoDB 連接器前,請先完成下列工作:
- 在 Google Cloud 專案中:
- 確認已設定網路連線。如要瞭解網路模式,請參閱「網路連線」。如要瞭解如何為 MongoDB Atlas 叢集設定網路連線,請參閱適用於 MongoDB Atlas 叢集的私人連線。
- 將 roles/connectors.admin IAM 角色授予設定連線器的使用者。
- 將下列 IAM 角色授予要用於連接器的服務帳戶:
roles/secretmanager.viewer
roles/secretmanager.secretAccessor
服務帳戶是特殊的 Google 帳戶類型,主要用於代表需要驗證且必須取得授權才能存取 Google API 資料的非人類使用者。如果您沒有服務帳戶,請建立服務帳戶。詳情請參閱「建立服務帳戶」。
- 啟用下列服務:
secretmanager.googleapis.com
(Secret Manager API)connectors.googleapis.com
(Connectors API)
如要瞭解如何啟用服務,請參閱「啟用服務」。
如果專案先前未啟用這些服務或權限,系統會在設定連結器時提示您啟用。
- 使用防火牆限制網路對 Atlas 叢集的存取權:
如要限制 Atlas 叢集的網路存取權,請將 MongoDB 連接器設定為使用一組靜態 IP 位址,處理連線產生的流量。 如要瞭解如何允許連線透過防火牆連線,請參閱「透過防火牆連線至公開後端應用程式」。
設定連接器
連線專屬於資料來源。也就是說,如果您有多個資料來源,則必須為每個資料來源建立個別的連線。如要建立連線,請按照下列步驟操作:
- 在 Cloud 控制台中,前往「Integration Connectors」>「Connections」頁面,然後選取或建立 Google Cloud 專案。
- 按一下「+ 建立新項目」開啟「建立連線」頁面。
- 在「位置」部分中,選擇連線位置。
- 區域:從下拉式清單中選取位置。
如需所有支援的地區清單,請參閱「位置」一文。
- 點選「下一步」。
- 區域:從下拉式清單中選取位置。
- 在「連線詳細資料」部分,完成下列步驟:
- 連接器:從可用連接器的下拉式清單中選取「MongoDB」。
- 連接器版本:從版本清單中選取版本
2
。 - 在「連線名稱」欄位中,輸入連線執行個體的名稱。
連線名稱必須符合下列條件:
- 連線名稱可使用英文字母、數字或連字號。
- 字母必須為小寫。
- 連線名稱開頭須為英文字母,結尾則須為英文字母或數字。
- 連結名稱不得超過 49 個字元。
- 視需要輸入連線執行個體的「Description」(說明)。
- 或者,可啟用 Cloud Logging,然後選取記錄層級。記錄層級預設為
Error
。 - 服務帳戶:選取具備必要角色的服務帳戶。
- 視需要設定「連線節點設定」:
- 節點數量下限:輸入連線節點數量下限。
- 節點數量上限:輸入連線節點數量上限。
節點是用來處理交易的連線單位 (或備用資源)。連線處理的交易量越多,就需要越多節點;反之,處理的交易量越少,需要的節點就越少。如要瞭解節點對連接器定價的影響,請參閱「 連線節點定價」。如未輸入任何值,系統預設會將節點下限設為 2 (提高可用性),節點上限則設為 50。
- 資料庫:要連線的 MongoDB 資料庫名稱。
- 連線逾時:指定作業完成前等待的秒數,超過這個時間就會取消作業。
- 連線集區大小上限:指定連線集區允許的連線數上限。
- 連線集區大小下限:指定連線集區中維持的連線數量下限。
- 連線閒置時間 (以秒為單位):指定連線在集區中可存在的最長閒置時間 (以秒為單位),超過後就會關閉連線。
- 連線存留時間 (秒):指定連線的存留時間上限 (以秒為單位)。超過時間限制後,連線就會關閉。
- 使用 SSL:指定是否啟用 SSL。
- 應用程式名稱:Mongo 的自訂應用程式名稱。
- 最長過時秒數:次要節點可過時的時間長度 (以秒為單位),超過後用戶端就不會再使用該節點執行讀取作業。
- 寫入關注(w 選項):要求確認寫入作業已傳播至指定數量且具有特定標記的執行個體。
- 寫入關注 (wtimeoutMS 選項):指定寫入關注的時間限制 (以毫秒為單位)。
- 寫入關注(記錄選項):要求 MongoDB 確認寫入作業已寫入記錄。
- 讀取偏好設定:將此設定為從副本集讀取的策略。可接受的值包括 primary、primaryPreferred、secondary、secondaryPreferred 和 nearest。
- 叢集類型:指定 MongoDB 叢集類型。
- 啟用加密:指定是否啟用加密功能。
- 加密類型:指定啟用的加密類型。目前僅支援
Local Encryption
類型。 - 加密結構定義:指定加密結構定義資訊,包括欄位和加密演算法、金鑰替代名稱、查詢類型和爭用因素。例如:
{ "database.collection": { "encryptMetadata": { "algorithm": "parentAlgo" }, "properties": { "passportId": {}, "medicalRecords": { "encryptMetadata": { "algorithm": "medicalRecordParentAlgo" }, "properties": { "medicalRecord1": {}, "medicalRecord2": { "encrypt": { "algorithm": "medicalRecord2Algo", "keyAltName": "medicalRecord2Altkey", "queryType": "equality", "contentionFactor": 3 } } } }, "insuranceProperties": { "properties": { "policyNumber": {}, "insuranceRecord1": { "encrypt": { "algorithm": "insuranceRecord1Algo", "keyAltName": "insuranceRecord1AltKey" } }, "insuranceRecord2": { "encrypt": { "algorithm": "insuranceRecord2Algo", "keyAltName": "insuranceRecord2AltKey", "contentionFactor": 5 } } } } } } }
- encryption_master_key:內含加密主金鑰的 Secret Manager 密鑰。
- encryption_key_vault:加密金鑰保存庫值。
- 驗證資料庫:指定用於驗證的 MongoDB 資料庫名稱。
- 選用:按一下「+ 新增標籤」,以鍵/值組合的形式為連線新增標籤。
- 點按「下一步」。
- 在「目的地」部分,輸入要連線的遠端主機 (後端系統) 詳細資料。
- 目的地類型:您可以將目的地詳細資料指定為主機位址,可以是下列任一項目:
- 單一 Mongo SRV 字串。例如
mongodb+srv://cluster2.2f.mongodb.net
。 - 個別副本。例如
dasdsf.2f.mongodb01.net
。 - IP 位址。例如:
10.23.123.12
如果未指定
mongodb+srv
,系統會在合併連線字串中的所有副本後,將mongodb://
前置字元加到最終到達網址。如要輸入其他目的地,請按一下「+新增目的地」。
- 單一 Mongo SRV 字串。例如
- 點按「下一步」。
- 目的地類型:您可以將目的地詳細資料指定為主機位址,可以是下列任一項目:
-
在「Authentication」(驗證) 部分中,輸入驗證詳細資料。
- 選取「驗證類型」並輸入相關詳細資料。
MongoDB 連線支援下列驗證類型:
- 使用者名稱和密碼
- 點按「下一步」。
如要瞭解如何設定這些驗證類型,請參閱「設定驗證」。
- 選取「驗證類型」並輸入相關詳細資料。
- 檢查:檢查連線和驗證詳細資料。
- 點選「建立」。
設定驗證機制
根據要使用的驗證方式輸入詳細資料。
-
使用者名稱和密碼
- 使用者名稱:連接器的使用者名稱
- 密碼:包含使用者密碼的 Secret Manager 密鑰。
- 驗證配置:用於驗證的配置。
MongoDB 連線支援下列驗證方案:
- Plain
- SCRAM-SHA-1
- SCRAM-SHA-256
實體、作業和動作
所有整合連接器都會為所連應用程式的物件提供抽象層。您只能透過這個抽象化程序存取應用程式的物件。抽象化會以實體、作業和動作的形式呈現。
- 實體: 實體可以視為已連結應用程式或服務中的物件,或是屬性集合。實體的定義因連接器而異。舉例來說,在資料庫連接器中,資料表是實體;在檔案伺服器連接器中,資料夾是實體;在訊息系統連接器中,佇列是實體。
不過,連接器可能不支援或沒有任何實體,在這種情況下,
Entities
清單會是空白。 - 作業: 作業是指您可以在實體上執行的活動。您可以對實體執行下列任一操作:
從可用清單中選取實體,系統會產生該實體可用的作業清單。如需作業的詳細說明,請參閱 Connectors 工作的實體作業。 不過,如果連接器不支援任何實體作業,系統就不會在
Operations
清單中列出這些不支援的作業。 - 動作: 動作是透過連接器介面提供給整合的第一類函式。動作可讓您變更一或多個實體,且因連接器而異。一般來說,動作會有一些輸入參數和輸出參數。不過,連接器可能不支援任何動作,此時
Actions
清單會是空白。
系統限制
每個節點的 MongoDB 連接器每秒最多可處理 70 筆交易,超出此限制的交易都會遭到節流。 根據預設,Integration Connectors 會為連線分配 2 個節點 (以提高可用性)。
如要瞭解 Integration Connectors 適用的限制,請參閱「限制」一文。
支援的資料類型
這個連接器支援的資料類型如下:
- BIGINT
- BINARY
- BIT
- BOOLEAN
- CHAR
- DATE
- DECIMAL
- DOUBLE
- FLOAT
- INTEGER
- LONGN VARCHAR
- LONG VARCHAR
- NCHAR
- NUMERIC
- NVARCHAR
- REAL
- SMALL INT
- 時間
- TIMESTAMP
- TINY INT
- VARBINARY
- VARCHAR
MongoDB Atlas 叢集的設定
MongoDB Atlas 叢集的驗證設定與先前文件所述步驟略有不同。如要針對 Atlas 叢集進行驗證,請先取得 Atlas 連線字串。如要取得 Atlas 連線字串,請按照下列步驟操作:
- 在「叢集」檢視畫面中,按一下要連線叢集的「連線」。
- 按一下「連結您的應用程式」。
- 選取任一驅動程式選項,即可顯示連線字串。
如要針對 Atlas 叢集進行驗證,請使用下列設定:
- 驗證資料庫:將值設為 admin,因為所有 MongoDB Atlas 使用者都與 admin 資料庫相關聯。
- Use SSL:將值設為 true。
- 伺服器:將值設為 mongodb+srv://MongoDB INSTANCE SERVER NAME,但不要加入使用者名稱和密碼。
動作
本節列出 MongoDB 連線支援的所有動作。
AggregatePipeline 動作
這項動作會將管道變更彙整到集合中。
AggregatePipeline 動作的輸入參數
參數名稱 | 資料類型 | 必填 | 說明 |
---|---|---|---|
集合 | 字串 | 是 | MongoDB 集合的名稱。 |
pipeline | 字串 | 是 | 包含欄位階段的匯總管道,以字串清單形式呈現。 |
page_size | 整數 | 否 | 結果集每個頁面要包含的項目數量。 |
page_no | 整數 | 否 | 要從結果集擷取的網頁索引。索引從 0 開始。 |
如要瞭解如何設定 AggregatePipeline
動作,請參閱「範例」。
CountDocuments 動作
這項動作會計算集合中符合指定條件的所有文件。
CountDocuments 動作的輸入參數
參數名稱 | 資料類型 | 必填 | 說明 |
---|---|---|---|
集合 | 字串 | 是 | MongoDB 集合的名稱。 |
篩選 | 字串 | 否 | 以 MongoDB 查詢格式表示的篩選條件。如果查詢類型等式已啟用加密結構定義,這個條件可以包含加密欄位。 |
CountDocuments 動作的輸出參數
這項動作會傳回符合特定條件的所有文件數量。
如要瞭解如何設定 CountDocuments
動作,請參閱「範例」。
DeleteDocuments 動作
這項操作會刪除集合中的文件。
DeleteDocuments 動作的輸入參數
參數名稱 | 資料類型 | 必填 | 說明 |
---|---|---|---|
集合 | 字串 | 是 | MongoDB 集合的名稱。 |
篩選 | 字串 | 否 | 以 MongoDB 查詢格式表示的篩選條件。如果查詢類型等式已啟用加密結構定義,這個條件可以包含加密欄位。 |
DeleteDocuments 動作的輸出參數
這項動作會傳回已刪除的文件數量。
如要瞭解如何設定 DeleteDocuments
動作,請參閱「範例」。
DistinctValues 動作
這項動作會傳回集合中欄位的不重複值。
DistinctValues 動作的輸入參數
參數名稱 | 資料類型 | 必填 | 說明 |
---|---|---|---|
集合 | 字串 | 是 | MongoDB 集合的名稱。 |
欄位 | 字串 | 是 | 要查詢不重複值的欄位名稱。 |
篩選 | 字串 | 否 | 以 MongoDB 查詢格式表示的篩選條件。如果查詢類型等式已啟用加密結構定義,這個條件可以包含加密欄位。 |
如要瞭解如何設定 DistinctValues
動作,請參閱「範例」。
InsertDocument 動作
這項動作會在集合中插入文件。
下表說明 InsertDocument
動作的輸入和輸出參數。
InsertDocument 動作的輸入參數
參數名稱 | 資料類型 | 必填 | 說明 |
---|---|---|---|
集合 | 字串 | 是 | MongoDB 集合的名稱。 |
文件 | 字串 | 否 | 要新增至 MongoDB 集合的文件。 |
InsertDocument 動作的輸出參數
這項動作會傳回插入文件的 ID。
如要瞭解如何設定 InsertDocument
動作,請參閱「範例」。
ListDocuments 動作
下表說明 ListDocuments 動作的輸入和輸出參數。
ListDocuments 動作的輸入參數
參數名稱 | 資料類型 | 必填 | 說明 |
---|---|---|---|
集合 | 字串 | 是 | MongoDB 集合的名稱。 |
篩選 | 字串 | 否 | 以 MongoDB 查詢格式表示的篩選條件。如果查詢類型等式啟用加密結構定義,這個條件可以包含加密欄位。 |
page_size | 整數 | 否 | 結果集每個頁面要包含的項目數量。 |
page_no | 整數 | 否 | 要從結果集擷取的網頁索引。索引從 0 開始。 |
projection | 字串 | 否 | 以 Mongo 格式表示的欄位或屬性集,將納入查詢投影。 |
sort_by | 字串 | 否 | 使用 MongoDB 的二進位 JSON (BSON) 格式指定查詢結果排序。 |
ListDocuments 動作的輸出參數
這項動作會根據頁面大小,傳回符合篩選條件的文件清單。預設頁面大小為 25,上限為 50,000。
如要瞭解如何設定 ListDocuments
動作,請參閱「範例」。
UpdateDocuments 動作
下表說明 UpdateDocuments
動作的輸入和輸出參數。
UpdateDocuments 動作的輸入參數
參數名稱 | 資料類型 | 必填 | 說明 |
---|---|---|---|
集合 | 字串 | 是 | MongoDB 集合的名稱。 |
值 | 字串 | 否 | 要以 Mongo 格式更新的值。 |
篩選 | 字串 | 否 | 以 MongoDB 查詢格式表示的篩選條件。如果查詢類型等式已啟用加密結構定義,這個條件可以包含加密欄位。 |
upsert | 布林值 | 否 | 作業是否為 upsert。 |
UpdateDocuments 動作的輸出參數
這項動作會傳回更新的文件數量。
如要瞭解如何設定 UpdateDocuments
動作,請參閱「範例」。
UpdateDocumentsWithEncryption 動作
使用者可透過這項動作更新加密值。下表說明 UpdateDocumentsWithEncryption
動作的輸入和輸出參數。
UpdateDocumentsWithEncryption 動作的輸入參數
參數名稱 | 資料類型 | 必填 | 說明 |
---|---|---|---|
集合 | 字串 | 是 | MongoDB 集合的名稱。 |
文件 | 字串 | 否 | 包含要更新值的文件。值可以包含將使用 CSFLE 加密的欄位。 |
篩選 | 字串 | 否 | 以 MongoDB 查詢格式表示的篩選條件。如果查詢類型等式已啟用加密結構定義,這個條件可以包含加密欄位。 |
upsert | 布林值 | 否 | 指定作業是否為 upsert 。 |
UpdateDocumentsWithEncryption 動作的輸出參數
這項動作會傳回更新的文件數量。
如要瞭解如何設定 UpdateDocumentsWithEncryption
動作,請參閱「範例」。
範例
本節說明如何使用這個連接器執行部分實體作業和動作。
範例 - 匯總管道變更
- 在「
Configure connector task
」對話方塊中,按一下Actions
。 - 選取
AggregatePipeline
動作,然後按一下「完成」。 - 在「Connectors」(連結器) 任務的「Task Input」(任務輸入內容) 區段中,按一下
connectorInputPayload
,然後在Default Value
欄位中輸入類似下列的值:{ "collection": "restaurants", "pipeline": { "stages": [ "{$addFields: { \"new_menu_item\": \"tea\"}}" ] }, "page_size": 1, "page_no": 0 }
這個範例會將新菜單項目新增至 restaurant
集合中的所有文件,並傳回結果的第一頁。
範例 - 計算文件數量
- 在「
Configure connector task
」對話方塊中,按一下Actions
。 - 選取
CountDocuments
動作,然後按一下「完成」。 - 在「Connectors」(連結器) 任務的「Task Input」(任務輸入內容) 區段中,按一下
connectorInputPayload
,然後在Default Value
欄位中輸入類似下列的值:{ "collection":"restaurants", "filter": "{\"name\": \"CarvelIceCream1\"}" }
這個範例會傳回符合篩選條件的文件數量。如果動作成功,Connectors
工作的 connectorOutputPayload
回應參數會包含類似下列內容的值:
{ "results": [ { "count": 5 } ] }
範例 - 刪除文件
- 在「
Configure connector task
」對話方塊中,按一下Actions
。 - 選取
DeleteDocuments
動作,然後按一下「完成」。 - 在「Connectors」(連結器) 任務的「Task Input」(任務輸入內容) 區段中,按一下
connectorInputPayload
,然後在Default Value
欄位中輸入下列內容:{ "collection": "Insurancedocuments", "filter": "{\"insurance.provider\":\"ABC\"}"}
這個範例會刪除保險公司為 ABC
的所有文件。
範例 - 尋找集合中的不重複值
- 在「
Configure connector task
」對話方塊中,按一下Actions
。 - 選取
DistinctValues
動作,然後按一下「完成」。 - 在「Connectors」(連結器) 任務的「Task Input」(任務輸入內容) 區段中,按一下
connectorInputPayload
,然後在Default Value
欄位中輸入類似下列的值:{"collection":"restaurants","field":"contact"}
這個範例會傳回 restaurants
集合中的不重複值。如果動作成功,Connectors
工作的 connectorOutputPayload
回應參數會包含類似下列內容的值:
{ "results": [ { "DistinctValues": [ "3217902323", "8747479023", "3492619023" ] } ] }
範例 - 插入文件
- 在「
Configure connector task
」對話方塊中,按一下Actions
。 - 選取
InsertDocument
動作,然後按一下「完成」。 - 在「Connectors」(連結器) 任務的「Task Input」(任務輸入內容) 區段中,按一下
connectorInputPayload
,然後在Default Value
欄位中輸入類似下列的值:{ { "collection": "Insurancedocuments", "document": "{\"fname\":\"firstName\", \"lname\":\"lastName\", \"passportId\":\"ABCD1234\", \"bloodType\":\"A\", \"medicalRecords\":[{\"item\":\"name1\"},{\"item\":\"name2\"}], \"insurance\":{\"policyNumber\":\"12345\",\"provider\":\"provider2\"}}" } }
這個範例會在 Insurancedocuments
集合中插入文件。
文件內容是在 document
欄位中指定。如果插入成功,您會在 Connectors
工作的 connectorOutputPayload
回應參數中,取得插入文件的 ID。
範例 - 列出文件
- 在「
Configure connector task
」對話方塊中,按一下Actions
。 - 選取
ListDocuments
動作,然後按一下「完成」。 - 在「Connectors」(連結器) 任務的「Task Input」(任務輸入內容) 區段中,按一下
connectorInputPayload
,然後在Default Value
欄位中輸入類似下列的值:{ "collection": "Insurancedocuments", "filter": "{\"insurance.provider\":\"ABC\"}", "page_size": 10 }
這個範例會傳回 Insurancedocuments
集合中的文件,其中保險公司為 ABC
。結果集的頁面大小設為 10,您可以在 Connectors
工作的 connectorOutputPayload
回應參數中,以 JSON 格式取得檔案清單。
範例 - 更新文件
- 在「
Configure connector task
」對話方塊中,按一下Actions
。 - 選取
UpdateDocuments
動作,然後按一下「完成」。 - 在「Connectors」(連結器) 任務的「Task Input」(任務輸入內容) 區段中,按一下
connectorInputPayload
,然後在Default Value
欄位中輸入類似下列的值:{"collection":"Insurancedocuments", "values":" {$set: { lname:\"Smith\" }}", "filter":"{\"insurance.provider\":\"ABC\"}"}
這個範例會將符合篩選條件的文件中的姓氏更新為 Smith
。如果更新成功,系統會顯示更新的文件數量。回應會顯示在 Connectors
工作的 connectorOutputPayload
回應參數中。
範例 - 更新加密文件
- 在「
Configure connector task
」對話方塊中,按一下Actions
。 - 選取
UpdateDocumentsWithEncryption
動作,然後按一下「完成」。 - 在「Connectors」(連結器) 任務的「Task Input」(任務輸入內容) 區段中,按一下
connectorInputPayload
,然後在Default Value
欄位中輸入下列內容:{ {"collection":"Insurancedocuments", "document":" { \"insurance.provider\":\"XYZ\" }", "filter":"{\"insurance.provider\":\"ABC\"}"}
這個範例會將所有文件中保險提供者為 ABC
的部分,更新為 XYZ
。
使用 Terraform 建立連線
您可以使用 Terraform 資源建立新連線。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
如要查看用於建立連線的 Terraform 範本範例,請參閱範本範例。
使用 Terraform 建立這項連線時,您必須在 Terraform 設定檔中設定下列變數:
參數名稱 | 資料類型 | 必填 | 說明 |
---|---|---|---|
資料庫 | STRING | 是 | MongoDB 資料庫的名稱。 |
逾時 | INTEGER | 否 | 連線逾時時間 (以秒為單位), |
enable_ssl | BOOLEAN | 否 | 這個欄位會設定是否啟用 SSL。 |
app_name | STRING | 否 | MongoDB 的自訂應用程式名稱。 |
max_staleness_seconds | INTEGER | 否 | 次要副本可過時的時間 (以秒為單位),超過後用戶端就會停止使用該副本進行讀取作業。 |
write_concern | STRING | 否 | 您可以要求系統確認寫入作業已傳播至指定數量且具有指定標記的執行個體。 |
write_concern_timeout | INTEGER | 否 | 指定寫入關注的時間限制 (以毫秒為單位)。 |
write_concern_journal | BOOLEAN | 否 | 要求 MongoDB 確認寫入作業已寫入日誌。 |
read_preference | ENUM | 否 | 讀取這個連線的偏好設定。支援的值包括:primary、primaryPreferred、secondary、secondaryPreferred、nearest |
cluster_type | ENUM | 否 | 指定 MongoDB 叢集類型。支援的值包括:REPLICA_SET、STANDALONE、SHARDED、UNKNOWN |
enable_encryption | BOOLEAN | 否 | 這個欄位會設定是否啟用加密功能。 |
encryption_type | ENUM | 否 | 這個欄位會設定啟用的加密類型。支援的值為:local |
encryption_schema | STRING | 否 | 加密結構資訊,包括使用的欄位和加密演算法。 |
encryption_master_key | SECRET | 否 | Secret Manager 密鑰,內含加密主金鑰。 |
encryption_key_vault | STRING | 否 | Encryption Key Vault 值。 |
auth_database | STRING | 是 | 用於驗證的 MongoDB 資料庫名稱。 |
在整合服務中使用 MongoDB 連線
建立連線後,Apigee Integration 和 Application Integration 都會提供該連線。您可以在整合中透過「連接器」工作使用連線。
- 如要瞭解如何在 Apigee Integration 中建立及使用「連線器」工作,請參閱「連線器工作」。
- 如要瞭解如何在 Application Integration 中建立及使用「連線器」工作,請參閱「連線器工作」。