MongoDBMongoDB

MongoDB 接続を設定するには、 接続文字列データベース名 を指定します。To set up a MongoDB connection, provide a Connection String and a DB Name.

接続文字列Connection String

  • 最も単純なものは次のとおりです。 mongodb://username:password@hostname:port/dbnameThe simplest: mongodb://username:password@hostname:port/dbname
  • SSL が有効になっている場合: mongodb://username:password@hostname:port/dbname?ssl=trueWith SSL enabled: mongodb://username:password@hostname:port/dbname?ssl=true
  • SSL を有効にし、自己署名証明書を使用する (証明書の検証を無効にする): mongodb://username:password@hostname:port/dbname?ssl=true&ssl_cert_reqs=CERT_NONEWith SSL enabled and self-signed certificates (disables certificate verification): mongodb://username:password@hostname:port/dbname?ssl=true&ssl_cert_reqs=CERT_NONE

必要に応じて、クエリ文字列に追加の接続オプションを渡すことができます。If needed, you can pass additional connection options in the query string. 詳細については、[接続オプション] ( https://docs.mongodb.com/manual/reference/connection-string /#connection オプション) を参照してください。See full details in [Connection Options](https://docs.mongodb.com/manual/reference/connection-string /#connection-options).

データソースの構成には、データベース名として別のフィールドがあり、接続文字列にも追加されていることがわかります。You might notice that there is a separate field for the DB Name in the data source configuration and we also include it in the connection string. これは通常、MLab などの共有ホストで必要になります。This is usually required on shared hosts like MLab.

MongoDB AtlasMongoDB Atlas

これらは、MongoDB に接続されている共有環境にあるため、free レベルのアカウントで問題が発生する可能性があります。Because they are on a shared environment connecting to MongoDB Atlas free tier accounts can be problematic. 最適な結果を得るには、次の形式の接続文字列を使用します。For best results, use a connection string of the format:

mongodb+srv://<user>:<password>@<subdomain>.mongodb.net/<database>?retryWrites=true

接続の問題のトラブルシューティングTroubleshooting connection issues

エラー: "SSL ハンドシェイクに失敗しました: [SSL: CERTIFICATE_VERIFY_FAILED] 証明書の検証に失敗しました"Error: “SSL handshake failed: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed”

これは通常、MongoDB サーバーが自己署名証明書を使用している場合に発生します。This usually happens when your MongoDB server is using self-signed certificates. 適切に署名された証明書に切り替えるか、接続文字列にオプションを追加することができ ssl_cert_reqs=CERT_NONE ます。You can either switch to a properly signed certificate or just add the ssl_cert_reqs=CERT_NONE option to your Connection String.

MongoDB クエリを JSON オブジェクトとして記述します。Write your MongoDB query as a JSON object. 実行中は、SQL Analytics によって、 db.collection.find() 呼び出しまたは呼び出しに変換され db.collection.aggregate() ます。During execution, SQL Analytics will convert it into either a db.collection.find() call or a db.collection.aggregate() call. JSON オブジェクトがどのようにマッピングされ、MongoDB に送信されるかを次に示します。Here’s how your JSON object is mapped and sent to MongoDB:

MongoDB トークンMongoDB Token SQL Analytics での書き込み先Where to write in SQL Analytics
db [データソースのセットアップ] 画面On the data source setup screen
collection collectionクエリオブジェクトにキーを追加するAdd a collection key in your query object
query queryクエリオブジェクトにキーを追加するAdd a query key in your query object
projection fieldsクエリオブジェクトにキーを追加するAdd a fields key in your query object
.sort() method sortクエリオブジェクトにキーを追加するAdd a sort key in your query object
.skip() method skipクエリオブジェクトにキーを追加するAdd a skip key in your query object
.limit() method limitクエリオブジェクトにキーを追加するAdd a limit key in your query object
db.collection.count() メソッドdb.collection.count() method countクエリオブジェクトで任意の値を持つキーを使用するUse a count key with any value in your query object

各キーに使用する値は、そのまま MongoDB にパラメーターとして渡されます。The values you use for each key are passed unmodified as as parameters to MongoDB.

クエリの例Query Examples

単純なクエリの例Simple Query Example

{
  "collection": "my_collection",
  "query": {
    "type": 1
  },
  "fields": {
    "_id": 1,
    "name": 2
  },
  "sort": [{
    "name": "date",
    "direction": -1
  }]
}

Javascript で同等のクエリが記述されます。 db.my_collection.find({"type": 1}, {"_id": 1, "name": 2}).sort([{"name": "date","direction": -1}])An equivalent query in Javascript would be written: db.my_collection.find({"type": 1}, {"_id": 1, "name": 2}).sort([{"name": "date","direction": -1}])

カウントクエリの例Count Query Example

{
  "collection": "my_collection",
  "count": true
}

集計Aggregation

集計では、PyMongo で使用される構文と同様の構文を使用します。Aggregation uses a syntax similar to the one used in PyMongo. ただし、並べ替えの正しい順序をサポートするために、実行前に SON (並べ替えられた辞書) オブジェクトに変換する "$sort" 操作には、通常のリストを使用します。However, to support the correct order of sorting, it uses a regular list for the “$sort” operation that converts into a SON (sorted dictionary) object before execution.

集計クエリの例:Aggregation query example:

{
  "collection": "things",
  "aggregate": [{
    "$unwind": "$tags"
  }, {
    "$group": {
      "_id": "$tags",
      "count": {
        "$sum": 1
      }
    }
  }, {
    "$sort": [{
      "name": "count",
      "direction": -1
    }, {
      "name": "_id",
      "direction": -1
    }]
  }]
}

MongoDB 拡張 JSON サポートMongoDB Extended JSON Support

独自の拡張機能と共に MongoDB 拡張 JSON がサポートされる $humanTime ようになります。We support MongoDB Extended JSON along with our own extension - $humanTime:

{
  "collection": "date_test",
  "query": {
    "lastModified": {
      "$gt": {
        "$humanTime": "3 years ago"
      }
    }
  },
  "limit": 100
}

上記のような、人間が判読できる文字列 ("3 年前"、"昨日" など)、またはタイムスタンプを受け取ります。It accepts a human-readable string like the above (“3 years ago”, “yesterday”, etc) or timestamps.

注意

関数は、 $humanTime SQL Analytics が使用する形式と mongodb で想定される形式の違いにより、データ型が date または date/Time の クエリパラメーター を mongodb で使用する場合にも必要です。The $humanTime function is also needed when using Query Parameters of type Date or Date/Time with MongoDB, due to the difference between the format SQL Analytics uses and the one MongoDB expects.

日付 (または日付範囲) パラメーターを使用する場合は、オブジェクトを使用してラップし $humanTime ます。はに {{param}} なります {"$humanTime": "{{param}} 00:00"} ( 00:00 サフィックスは日付パラメーターでのみ必要です。日付/時刻パラメーターには、省略する必要があります)。When using a Date (or Date Range) parameter, wrap it with a $humanTime object: {{param}} becomes {"$humanTime": "{{param}} 00:00"} (the 00:00 suffix is needed only with Date parameters, for Date Time parameters you should skip it).

MongoDB のフィルター処理MongoDB Filtering

":: Filter" キーワードが最後に追加された列を射影することにより、Mongo クエリにフィルターを追加できます。You can add filters to Mongo queries by projecting a column with the ‘::filter’ keyword added on to the end.

{
  "collection": "zipcodes",
  "aggregate": [{
    "$project": {
      "_id": "$_id",
      "city": "$city",
      "loc": "$loc",
      "pop": "$pop",
      "state::filter": "$state"
    }
  }]
}

上の例では、' State ' 列が表示され、この列に対してフィルター処理を行うことができます。The above example will show a ‘State’ column, and allow you to filter on this column.

クエリの問題のトラブルシューティングTroubleshoot query issues

並べ替えのメモリ制限が104857600バイトを超えましたSort exceeded memory limit of 104857600 bytes

並べ替えはメモリ制限の104857600バイトを超過しましたが、外部の並べ替えにはオプトインされませんでした。Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. 操作を中止しています。Aborting operation. allowDiskUse:trueオプトインに渡す。Pass allowDiskUse:true to opt in.

MongoDB では、メモリ内の並べ替えの制限は100M であり、大規模な並べ替えを実行するには、 allowDiskUse 並べ替え用に一時ファイルにデータを書き込むオプションを有効にする必要があります。In MongoDB, the in-memory sorting have a limit of 100M, to perform a large sort, you need enable allowDiskUse option to write data to a temporary files for sorting.

オプションを有効にするには、 allowDiskUse クエリにオプションを追加するだけです。To enable the allowDiskUse option, just add the option to your query:

{
  "allowDiskUse": true
}