Azure Cosmos DB の MongoDB 用 API: サポートされる機能と構文Azure Cosmos DB’s API for MongoDB: supported features and syntax

Azure Cosmos DB は、Microsoft のグローバルに分散されたマルチモデル データベース サービスです。Azure Cosmos DB is Microsoft's globally distributed multi-model database service. Azure Cosmos DB の MongoDB 用 API との通信は、オープン ソースで公開されている任意の MongoDB クライアント ドライバーを使って行うことができます。You can communicate with the Azure Cosmos DB's API for MongoDB using any of the open source MongoDB client drivers. Azure Cosmos DB の MongoDB 用 API では、MongoDB ワイヤ プロトコルに従うことにより、既存のクライアント ドライバーを利用できます。The Azure Cosmos DB's API for MongoDB enables the use of existing client drivers by adhering to the MongoDB wire protocol.

Azure Cosmos DB の MongoDB 用 API を使用すれば、使い慣れた MongoDB API を活用できます。グローバル配信自動シャーディング、可用性や待ち時間の保証、すべてのフィールドの自動インデックス作成、保存時の暗号化、バックアップを始めとする Cosmos DB のエンタープライズ機能も、すべて利用できます。By using the Azure Cosmos DB's API for MongoDB, you can enjoy the benefits of the MongoDB you're used to, with all of the enterprise capabilities that Cosmos DB provides: global distribution, automatic sharding, availability and latency guarantees, automatic indexing of every field, encryption at rest, backups, and much more.

プロトコルのサポートProtocol Support

Azure Cosmos DB の MongoDB 用 API は、既定で MongoDB サーバー バージョン 3.2 と互換性があります。The Azure Cosmos DB's API for MongoDB is compatible with MongoDB server version 3.2 by default. 以下に、サポートされている演算子およびすべての制限事項や例外の一覧を示します。The supported operators and any limitations or exceptions are listed below. 現在、MongoDB バージョン 3.4 で追加された機能やクエリ演算子は、プレビュー機能として使用できます。Features or query operators added in MongoDB version 3.4 are currently available as a preview feature. これらのプロトコルを認識するクライアント ドライバーはすべて、Azure Cosmos DB の MongoDB 用 API に接続できるはずです。Any client driver that understands these protocols should be able to connect to Azure Cosmos DB's API for MongoDB.

また、現在、MongoDB 集計パイプラインも、別個のプレビュー機能として使用できます。The MongoDB aggregation pipeline is also currently available as a separate preview feature.

クエリ言語のサポートQuery language support

Azure Cosmos DB の MongoDB 用 API では、MongoDB クエリ言語のコンストラクトが包括的にサポートされています。Azure Cosmos DB's API for MongoDB provides comprehensive support for MongoDB query language constructs. 以下に、現在サポートされている操作、演算子、ステージ、コマンド、およびオプションの詳細な一覧を示します。Below you can find the detailed list of currently supported operations, operators, stages, commands and options.

データベース コマンドDatabase commands

Azure Cosmos DB の MongoDB 用 API では、次のデータベース コマンドがサポートされています。Azure Cosmos DB's API for MongoDB supports the following database commands:

クエリおよび書き込み操作コマンドQuery and write operation commands

  • 削除delete
  • findfind
  • findAndModifyfindAndModify
  • getLastErrorgetLastError
  • getMoregetMore
  • insertinsert
  • updateupdate

認証コマンドAuthentication commands

  • logoutlogout
  • authenticateauthenticate
  • getnoncegetnonce

管理コマンドAdministration commands

  • dropDatabasedropDatabase
  • listCollectionslistCollections
  • dropdrop
  • createcreate
  • filemd5filemd5
  • createIndexescreateIndexes
  • listIndexeslistIndexes
  • dropIndexesdropIndexes
  • connectionStatusconnectionStatus
  • reIndexreIndex

診断コマンドDiagnostics commands

  • buildInfobuildInfo
  • collStatscollStats
  • dbStatsdbStats
  • hostInfohostInfo
  • listDatabaseslistDatabases
  • whatsmyuriwhatsmyuri

集計パイプラインAggregation pipeline

Cosmos DB では、パブリック プレビューで集計パイプラインがサポートされています。Cosmos DB supports aggregation pipeline in public preview. パブリック プレビューの利用を開始する手順については、Azure ブログを参照してください。See the Azure blog for instructions on how to onboard to the public preview.

集計コマンドAggregation commands

  • aggregateaggregate
  • countcount
  • distinctdistinct

集計ステージAggregation stages

  • $project$project
  • $match$match
  • $limit$limit
  • $skip$skip
  • $unwind$unwind
  • $group$group
  • $sample$sample
  • $sort$sort
  • $lookup$lookup
  • $out$out
  • $count$count
  • $addFields$addFields

集計式Aggregation expressions

ブール式Boolean expressions

  • $and$and
  • $or$or
  • $not$not

設定式Set expressions

  • $setEquals$setEquals
  • $setIntersection$setIntersection
  • $setUnion$setUnion
  • $setDifference$setDifference
  • $setIsSubset$setIsSubset
  • $anyElementTrue$anyElementTrue
  • $allElementsTrue$allElementsTrue

比較式Comparison expressions

  • $cmp$cmp
  • $eq$eq
  • $gt$gt
  • $gte$gte
  • $lt$lt
  • $lte$lte
  • $ne$ne

算術式Arithmetic expressions

  • $abs$abs
  • $add$add
  • $ceil$ceil
  • $divide$divide
  • $exp$exp
  • $floor$floor
  • $ln$ln
  • $log$log
  • $log10$log10
  • $mod$mod
  • $multiply$multiply
  • $pow$pow
  • $sqrt$sqrt
  • $subtract$subtract
  • $trunc$trunc

文字列式String expressions

  • $concat$concat
  • $indexOfBytes$indexOfBytes
  • $indexOfCP$indexOfCP
  • $split$split
  • $strLenBytes$strLenBytes
  • $strLenCP$strLenCP
  • $strcasecmp$strcasecmp
  • $substr$substr
  • $substrBytes$substrBytes
  • $substrCP$substrCP
  • $toLower$toLower
  • $toUpper$toUpper

配列式Array expressions

  • $arrayElemAt$arrayElemAt
  • $concatArrays$concatArrays
  • $filter$filter
  • $indexOfArray$indexOfArray
  • $isArray$isArray
  • $range$range
  • $reverseArray$reverseArray
  • $size$size
  • $slice$slice
  • $in$in

日付式Date expressions

  • $dayOfYear$dayOfYear
  • $dayOfMonth$dayOfMonth
  • $dayOfWeek$dayOfWeek
  • $year$year
  • $month$month
  • $week$week
  • $hour$hour
  • $minute$minute
  • $second$second
  • $millisecond$millisecond
  • $isoDayOfWeek$isoDayOfWeek
  • $isoWeek$isoWeek

条件式Conditional expressions

  • $cond$cond
  • $ifNull$ifNull

集計アキュムレータAggregation accumulators

  • $sum$sum
  • $avg$avg
  • $first$first
  • $last$last
  • $max$max
  • $min$min
  • $push$push
  • $addToSet$addToSet

演算子Operators

以下の演算子が、対応するそれらの使用例でサポートされています。Following operators are supported with corresponding examples of their use. 下記のクエリで使用されているこのサンプル ドキュメントを考慮に入れてください。Consider this sample document used in the queries below:

{
  "Volcano Name": "Rainier",
  "Country": "United States",
  "Region": "US-Washington",
  "Location": {
    "type": "Point",
    "coordinates": [
      -121.758,
      46.87
    ]
  },
  "Elevation": 4392,
  "Type": "Stratovolcano",
  "Status": "Dendrochronology",
  "Last Known Eruption": "Last known eruption from 1800-1899, inclusive"
}
operatorOperator Example
$eq$eq { "Volcano Name": { $eq: "Rainier" } } -
$gt$gt { "Elevation": { $gt: 4000 } } -
$gte$gte { "Elevation": { $gte: 4392 } } -
$lt$lt { "Elevation": { $lt: 5000 } } -
$lte$lte { "Elevation": { $lte: 5000 } } -
$ne$ne { "Elevation": { $ne: 1 } } -
$in$in { "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } } -
$nin$nin { "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } } -
$or$or { $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] } -
$and$and { $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] } -
$not$not { "Elevation": { $not: { $gt: 5000 } } } -
$nor$nor { $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] } -
$exists$exists { "Status": { $exists: true } } -
$type$type { "Status": { $type: "string" } } -
$mod$mod { "Elevation": { $mod: [ 4, 0 ] } } -
$regex$regex { "Volcano Name": { $regex: "^Rain"} } -

メモNotes

$regex クエリでは、左固定の式でインデックス検索が可能です。In $regex queries, Left-anchored expressions allow index search. ただし、'i' 修飾子 (大文字と小文字の区別なし) や 'm' 修飾子 (複数行) を使用すると、すべての式でコレクション スキャンが発生します。However, using 'i' modifier (case-insensitivity) and 'm' modifier (multiline) causes the collection scan in all expressions. '$' または '|' を含める必要がある場合、2 つ (以上) の正規表現クエリを作成することをお勧めします。When there's a need to include '$' or '|', it is best to create two (or more) regex queries. たとえば、元のクエリとして find({x:{$regex: /^abc$/}) がある場合、find({x:{$regex: /^abc/, x:{$regex:/^abc$/}}) のように変更する必要があります。For example, given the following original query: find({x:{$regex: /^abc$/}), it has to be modified as follows: find({x:{$regex: /^abc/, x:{$regex:/^abc$/}}). 最初の部分では、インデックスを使用して検索を ^ abc で始まるドキュメントに制限し、2 番目の部分で入力そのものを照合します。The first part will use the index to restrict the search to those documents beginning with ^abc and the second part will match the exact entries. バー演算子 '|' は "or" 関数として機能します。そのためクエリ find({x:{$regex: /^abc|^def/}) は、フィールド 'x' の値が "abc" または "def" で始まるドキュメントに一致します。The bar operator '|' acts as an "or" function - the query find({x:{$regex: /^abc|^def/}) matches the documents in which field 'x' has values that begin with "abc" or "def". インデックスを利用するには、find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }) のように、クエリを 2 つの異なるクエリに分割し、$or 演算子で結合することをお勧めします。To utilize the index, it's recommended to break the query into two different queries joined by the $or operator: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

更新演算子Update operators

フィールド更新演算子Field update operators

  • $inc$inc
  • $mul$mul
  • $rename$rename
  • $setOnInsert$setOnInsert
  • $set$set
  • $unset$unset
  • $min$min
  • $max$max
  • $currentDate$currentDate

配列更新演算子Array update operators

  • $addToSet$addToSet
  • $pop$pop
  • $pullAll$pullAll
  • $pull (注: 条件付きの $pull はサポートされていません)$pull (Note: $pull with condition is not supported)
  • $pushAll$pushAll
  • $push$push
  • $each$each
  • $slice$slice
  • $sort$sort
  • $position$position

ビット単位更新演算子Bitwise update operator

  • $bit$bit

地理空間演算子Geospatial operators

operatorOperator Example
$geoWithin$geoWithin { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } はいYes
$geoIntersects$geoIntersects { "Location.coordinates": { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } はいYes
$near$near { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } はいYes
$nearSphere$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } はいYes
$geometry$geometry { "Location.coordinates": { $geoWithin: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } はいYes
$minDistance$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } はいYes
$maxDistance$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } はいYes
$center$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } はいYes
$centerSphere$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } はいYes
$box$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } はいYes
$polygon$polygon { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } はいYes

並べ替え操作Sort Operations

findOneAndUpdate 操作を使用する場合、単一フィールドに対する並べ替え操作はサポートされていますが、複数フィールドに対する並べ替え操作はサポートされていません。When using the findOneAndUpdate operation, sort operations on a single field are supported but sort operations on multiple fields are not supported.

その他の演算子Additional operators

operatorOperator Example メモNotes
$all$all { "Location.coordinates": { $all: [-121.758, 46.87] } }
$elemMatch$elemMatch { "Location.coordinates": { $elemMatch: { $lt: 0 } } }
$size$size { "Location.coordinates": { $size: 2 } }
$comment$comment { "Location.coordinates": { $elemMatch: { $lt: 0 } }, $comment: "Negative values"}
$text$text サポートされていません。Not supported. 代わりに $regex を使用してください。Use $regex instead.

サポートされていない演算子Unsupported operators

$where$eval の演算子は、Azure Cosmos DB ではサポートされていません。The $where and the $eval operators are not supported by Azure Cosmos DB.

メソッドMethods

以下のメソッドがサポートされています。Following methods are supported:

カーソル メソッドCursor methods

方法Method Example メモNotes
cursor.sort()cursor.sort() cursor.sort({ "Elevation": -1 }) 並べ替えキーを持たないドキュメントは返されないDocuments without sort key do not get returned

一意なインデックスUnique indexes

Cosmos DB では、既定で、データベースに書き込まれるドキュメントのすべてのフィールドにインデックスが付けられます。Cosmos DB indexes every field in documents that are written to the database by default. 一意なインデックスによって、特定のフィールドの値が、コレクション内のすべてのドキュメントにわたって重複していないことが保証されます。これは、既定の "_id" キーで一意性が保持される方法と似ています。Unique indexes ensure that a specific field doesn’t have duplicate values across all documents in a collection, similar to the way uniqueness is preserved on the default "_id" key. "unique" 制約を含めて createIndex コマンドを使用すれば、Cosmos DB でカスタム インデックスを作成できます。You can create custom indexes in Cosmos DB by using the createIndex command, including the 'unique’ constraint.

Azure Cosmos DB の MongoDB 用 API を使用すると、すべての Cosmos アカウントで一意のインデックスを使用できます。Unique indexes are available for all Cosmos accounts using Azure Cosmos DB's API for MongoDB.

Time-to-live (TTL)Time-to-live (TTL)

Cosmos DB では、ドキュメントのタイムスタンプに基づく Time-to-live (TTL) がサポートされます。Cosmos DB supports a time-to-live (TTL) based on the timestamp of the document. Azure portal にアクセスすると、コレクションに対して TTL を有効にできます。TTL can be enabled for collections by going to the Azure portal.

ユーザーとロールの管理User and role management

Cosmos DB では、ユーザーとロールはまだサポートされていません。Cosmos DB does not yet support users and roles. Cosmos DB では、ロール ベース アクセス制御 (RBAC) と、Azure portal ([接続文字列] ページ) から取得できる読み取り/書き込みおよび読み取り専用のパスワード/キーがサポートされています。However, Cosmos DB supports role based access control (RBAC) and read-write and read-only passwords/keys that can be obtained through the Azure portal (Connection String page).

レプリケーションReplication

Cosmos DB では、最下位のレイヤーで、自動のネイティブ レプリケーションがサポートされています。Cosmos DB supports automatic, native replication at the lowest layers. このロジックは、低待機時間のグローバルなレプリケーションも実現するために拡張されています。This logic is extended out to achieve low-latency, global replication as well. Cosmos DB Cosmos では、手動のレプリケーション コマンドはサポートされていません。Cosmos DB does not support manual replication commands.

書き込み確認Write Concern

一部のアプリケーションでは、書き込み操作中に必要な応答数を指定する書き込み確認が利用されています。Some applications rely on a Write Concern which specifies the number of responses required during a write operation. Cosmos DB が背景でレプリケーションを処理する方法により、既定ですべての書き込みが自動的にクォーラムになります。Due to how Cosmos DB handles replication in the background all writes are all automatically Quorum by default. クライアント コードによって指定される書き込み確認はすべて無視されます。Any write concern specified by the client code is ignored. 詳細については、整合性レベルを使用して可用性とパフォーマンスを最大化する方法に関するページを参照してください。Learn more in Using consistency levels to maximize availability and performance.

シャーディングSharding

Cosmos DB では、自動のサーバー側シャーディングがサポートされています。Cosmos DB supports automatic, server-side sharding. Cosmos DB では、手動のシャーディング コマンドはサポートされていません。Cosmos DB does not support manual sharding commands.

次の手順Next steps

  • Azure Cosmos DB の MongoDB 用 API と共に Studio 3T を使用する方法を学習します。Learn how to use Studio 3T with Azure Cosmos DB's API for MongoDB.
  • Azure Cosmos DB の MongoDB 用 API と共に Robo 3T を使用する方法を学習します。Learn how to use Robo 3T with Azure Cosmos DB's API for MongoDB.
  • Azure Cosmos DB の MongoDB 用 API が使用されている MongoDB のサンプルを調べます。Explore MongoDB samples with Azure Cosmos DB's API for MongoDB.

注:この記事では、MongoDB データベースとのワイヤ プロトコルの互換性を提供する Azure Cosmos DB の機能について説明します。Microsoft は、このサービスを提供するための MongoDB データベースの運営は行いません。Azure Cosmos DB は MongoDB, Inc. には所属していません。Note: This article describes a feature of Azure Cosmos DB that provides wire protocol compatibility with MongoDB databases. Microsoft does not run MongoDB databases to provide this service. Azure Cosmos DB is not affiliated with MongoDB, Inc.