

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 連線至 MongoDB 資料來源
<a name="AMG-mongodb-datasource"></a>

 MongoDB 資料來源可讓您將來自 Amazon Managed Grafana 中 MongoDB 的資料視覺化。

**注意**  
此資料來源僅適用於 Grafana Enterprise。如需詳細資訊，請參閱[管理對企業外掛程式的存取](upgrade-to-enterprise-plugins.md)。  
此外，在支援第 9 版或更新版本的工作區中，此資料來源可能會要求您安裝適當的外掛程式。如需詳細資訊，請參閱[使用外掛程式擴展您的工作區](grafana-plugins.md)。

## Usage
<a name="mongo-usage"></a>

### 查詢編輯器
<a name="mongo-query-editor"></a>

 查詢編輯器支援與 MongoDB Shell 相同的語法，但有一些限制：\* 您只能執行一個命令/查詢。\* 僅支援讀取命令：**尋找**和**彙總** \* 不支援*大多數*物件建構函數 （受支援的 **ISODate** 除外） 

 編輯器會以下列方式展開 MongoDB Shell 語法：
+  **資料庫選擇** – 您可以提供資料庫的名稱來取代正常的 "db"：
**注意**  
您仍然可以使用 "db"。它會參考連線字串中的預設資料庫。

  ```
  sample_mflix.movies.find()
  ```
+  **彙總排序** – 通常排序發生在彙總管道中的步驟，但 MongoDB Atlas 免費方案不允許排序。我們已擴展語法，允許使用免費方案的使用者使用。
**注意**  
MongoDB 不會使用此語法執行排序。從集合查詢結果後，就會發生排序。

  ```
  sample_mflix.movies.aggregate({}).sort({"time": 1})
  ```
+  使用空白編輯器時，**Ctrl \+ Space** 會顯示所有可用資料庫的選擇。
+  在資料庫之後輸入點將顯示該資料庫所有可用集合的選擇。
+  在集合之後輸入點將顯示可用的查詢方法。
+  在查詢方法之後輸入點會顯示其他函數： sort/limit。

#### 執行查詢
<a name="mongo-running-the-query"></a>

 按 **Cmd \+ S** 執行查詢 

### 時間序列
<a name="mongo-time-series"></a>

 視覺化時間序列資料時，外掛程式需要知道要使用哪個欄位做為時間。只需投影名稱別名為 "time" 的欄位。欄位資料類型必須是日期。

 您可以強制到目前為止的非日期資料類型。這樣做將允許使用非日期欄位作為時間序列時間。下列範例顯示如何使用 MongoDB $dateFromParts 管道運算子，將 int 欄位 "year" 轉換為投影為 "time" 的日期。

```
sample_mflix.movies.aggregate([
{"$match": { "year": {"$gt" : 2000} }},
{"$group": { "_id": "$year", "count": { "$sum": 1 }}},
{"$project": { "_id": 0, "count": 1, "time": { "$dateFromParts": {"year": "$_id", "month": 2}}}}
]
).sort({"time": 1})
```

### 診斷
<a name="mongo-diagnostics"></a>

 [診斷命令](https://docs.mongodb.com/manual/reference/command/nav-diagnostic/) 

 目前支援下列診斷命令："stats"、"serverStatus"、"replSetGetStatus"、"getLog"、"connPoolStats"、"connectionStatus"、"buildInfo"、"dbStats"、"hostInfo"、"lockInfo"

 範例：

```
admin.connectionStatus()  // run the connectionStatus command
admin.connectionStatus({"authInfo.authenticatedUserRoles": 1})  // run and only return the "authInfo.authenticatedUserRoles" field
admin.connPoolStats({arg: "pool"})  // run the connPoolStats command and pass 1 argument
admin.serverStatus({args: {repl: 0, metrics:0}})  // run the serverStatus command and pass multiple args
```

### 巨集
<a name="mongo-macros"></a>

 您可以在查詢中參考儀表板時間範圍。
+ ` $__timeFrom `— 參考儀表板開始時間的巨集
+ ` $__timeTo `— 參考儀表板結束時間的巨集

```
          $__timeTo -  ``` sample_mflix.movies.find({released: {$gt:
          "$__timeFrom"}}).sort({year: 1})
```

#### 範本變數
<a name="mongo-variables"></a>

MongoDB 支援「複合變數」的概念，可讓您使用一個變數做為多個變數來執行複雜的多金鑰篩選條件。

若要建立複合變數，請使用使用底線將變數分解的命名慣例 （必須以底線開頭）：查詢`_var1_var2`時，回應的格式必須為： `val1-val2`

**範例：我想要篩選電影名稱和年份的結果。**

1. 建立查詢類型的變數： `_movie_year`

1. 將變數查詢設定為將傳回具有一個電影年屬性之項目陣列的查詢，如下列範例所示。

   ```
   // Example sample_mflix.movies.aggregate([
             {"$match": {year: {"$gt": 2011}}},
             {"$project": {_id: 0, movie_year: {"$concat":
             ["$title", " - ", {"$toString":"$year"}]}}}
             ])
   ```

   ```
    // [{"movie-year": "Ted - 2016"},
             {"movie-year": "The Terminator -
             1985"}]
   ```

1. 現在在您的查詢中，您可以使用語法 "$\_variable" 將 "Movie" 和 "Year" 參考為單獨的範本變數。

##### 使用臨機操作篩選條件
<a name="mongo-adhoc"></a>

除了任何名稱的標準「臨機操作篩選條件」類型變數之外，還必須建立第二個協助程式變數。它應該是名稱為 `mongodb\_adhoc\_query` 的「常數」類型，以及與查詢編輯器相容的值。查詢結果將用於填入可選取的篩選條件。您可以選擇隱藏此變數，因為沒有進一步用途。

```
          sample_mflix.movies.aggregate([
          {"$group": { "_id": "$year"}},
          {"$project": { "year": "$_id","_id":
          0 }} ] )
```