

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# MongoDB データソースに接続する
<a name="AMG-mongodb-datasource"></a>

 MongoDB データソースを使用すると、Amazon Managed Grafana の MongoDB からのデータを視覚的に表現することができます。

**注記**  
このデータソースは、Grafana Enterprise 専用です。詳細については、「[Enterprise プラグインへのアクセス許可の管理](upgrade-to-enterprise-plugins.md)」を参照してください。  
さらに、バージョン 9 以降をサポートするワークスペースでは、このデータソースに適切なプラグインをインストール必要がある可能性があります。詳細については、「[プラグインを使用したワークスペースの拡張](grafana-plugins.md)」を参照してください。

## 使用方法
<a name="mongo-usage"></a>

### クエリエディタ
<a name="mongo-query-editor"></a>

 クエリエディタは、MongoDB Shell と同じ構文をサポートしていますが、いくつかの制限があります。\$1 実行できるのは 1 つのコマンド/クエリのみです。\$1 **find** (検索) と **aggregate** (集計)の読み取り専用のコマンドのみがサポートされています。\$1 *ほとんどの*オブジェクトコンストラクターはサポートされていません (**ISODate** は例外としてサポートされています） 

 エディタは次の方法で MongoDB Shell 構文を拡張します。
+  **データベースの選択** — 通常の「db」の代わりにデータベースの名前を指定できます。
**注記**  
「db」を引き続き使用できます。接続文字列のデフォルトデータベースを参照します。

  ```
  sample_mflix.movies.find()
  ```
+  **集計のソート** – 通常、ソートは集計パイプライン内のステップで行われますが、MongoDB Atlas の無料プランではソートは実行できません。そのため、無料プランを利用しているユーザー向けに構文を拡張しました。
**注記**  
この構文でソートを実行するのは MongoDB ではなく、ソートは、コレクションから結果がクエリされた後に行われます。

  ```
  sample_mflix.movies.aggregate({}).sort({"time": 1})
  ```
+  エディタが空の状態で **[Ctrl \$1 スペース]** を押すと、使用可能なすべてのデータベースの選択肢が表示されます。
+  データベースの後にドットを入力すると、そのデータベースで使用可能なすべてのコレクションの選択肢が表示されます。
+  コレクションの後にドットを入力すると、使用可能なクエリメソッドが表示されます。
+  クエリメソッドの後にドットを入力すると、追加の関数 (sort/limit) が表示されます。

#### クエリの実行
<a name="mongo-running-the-query"></a>

 **Cmd \$1 S** を押すとクエリが実行されます。

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

 時系列データを視覚化する場合、プラグインにどのフィールドを時間として使用するかを伝える必要があります。これは、単純にそのフィールドを「time」という名前のエイリアスで投影するだけです。このフィールドのデータ型は日付型である必要があります。

 日付型以外のデータ型を強制的に日付型にすることができます。これにより、日付以外のフィールドを時系列時間として使用できるようになります。以下に、MongoDB \$1dateFromParts パイプライン演算子を使用して、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 では「複合変数」という概念がサポートされており、これを使用することで 1 つの変数を複数の変数として扱い、複雑な複数キーのフィルターを実行することができます。

複合変数を作成するには、`_var1_var2` のように変数をアンダースコアで区切る命名規則を使用します（アンダースコアで始める必要があります)。クエリを実行する際、応答は `val1-val2` の形式である必要があります。

**例:結果を「映画のタイトル」と「年」の両方でフィルタリングしたい場合。**

1. クエリ型の変数 `_movie_year` を作成します。

1. 変数クエリを設定して、以下の例のように「movie-year」プロパティを持つアイテムの配列を返すクエリにします。

   ```
   // 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. これで、クエリ内で「Movie」と「Year」をそれぞれ別のテンプレート変数として、「\$1\$1variable」構文を使用して参照できます。

##### アドホックフィルターの使用
<a name="mongo-adhoc"></a>

任意の名前の標準の「ad-hoc filter」型変数に加えて、2 番目のヘルパー変数を作成する必要があります。これは「mongodb\$1adhoc\$1query」という名前の「定数」型で、クエリエディタと互換性のある値でなければなりません。クエリの結果は、選択可能なフィルターを埋めるために使用されます。この変数はそれ以上の目的がないため、非表示にすることもできます。

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