Azure Cosmos DB の MongoDB (4.0 サーバー バージョン) 用 API: サポートされる機能と構文

適用対象: MongoDB 用 Azure Cosmos DB API

Azure Cosmos DB は、Microsoft のグローバルに分散されたマルチモデル データベース サービスです。 Azure Cosmos DB の MongoDB 用 API との通信は、オープン ソースで公開されている任意の MongoDB クライアント ドライバーを使って行うことができます。 Azure Cosmos DB の MongoDB 用 API では、MongoDB ワイヤ プロトコルに従うことにより、既存のクライアント ドライバーを利用できます。

Azure Cosmos DB の MongoDB 用 API を使用すれば、使い慣れた MongoDB API を活用できます。グローバル配信自動シャーディング、可用性や待ち時間の保証、保存時の暗号化、バックアップを始めとする Cosmos DB のエンタープライズ機能も、すべて利用できます。

プロトコルのサポート

以下に、サポートされている演算子およびすべての制限事項や例外の一覧を示します。 これらのプロトコルを認識するクライアント ドライバーはすべて、Azure Cosmos DB の MongoDB 用 API に接続できるはずです。 Azure Cosmos DB の MongoDB 用 API アカウントを使用するときは、3.6 以降のバージョンのアカウントのエンドポイントが *.mongo.cosmos.azure.com という形式であるのに対し、3.2 バージョンのアカウントのエンドポイントは *.documents.azure.com という形式です。

注意

この記事では、サポートされているサーバー コマンドの一覧のみを示し、クライアント側のラッパー関数については除外しています。 deleteMany()updateMany() などのクライアント側のラッパー関数は、内部では delete()update() といったサーバー コマンドを利用しています。 サポートされているサーバー コマンドを利用する関数は、Azure Cosmos DB の MongoDB 用 API と互換性があります。

クエリ言語のサポート

Azure Cosmos DB の MongoDB 用 API では、MongoDB クエリ言語のコンストラクトが包括的にサポートされています。 以下に、現在サポートされている操作、演算子、ステージ、コマンド、およびオプションの詳細な一覧を示します。

データベース コマンド

Azure Cosmos DB の MongoDB 用 API では、次のデータベース コマンドがサポートされています。

クエリおよび書き込み操作コマンド

command サポートされています
change streams はい
delete はい
eval いいえ
検索 はい
findAndModify はい
getLastError はい
getMore はい
getPrevError いいえ
insert はい
parallelCollectionScan いいえ
resetError いいえ
update はい

トランザクション コマンド

command サポートされています
abortTransaction はい
commitTransaction はい

認証コマンド

command サポートされています
authenticate はい
getnonce はい
logout はい

管理コマンド

command サポートされています
cloneCollectionAsCapped いいえ
collMod いいえ
connectionStatus いいえ
convertToCapped いいえ
copydb いいえ
create はい
createIndexes はい
currentOp はい
drop はい
dropDatabase はい
dropIndexes はい
filemd5 はい
killCursors はい
killOp いいえ
listCollections はい
listDatabases はい
listIndexes はい
reIndex はい
renameCollection いいえ

診断コマンド

command サポートされています
buildInfo はい
collStats はい
connPoolStats いいえ
connectionStatus いいえ
dataSize いいえ
dbHash いいえ
dbStats はい
explain はい
features いいえ
hostInfo はい
listDatabases はい
listCommands いいえ
profiler いいえ
serverStatus いいえ
top いいえ
whatsmyuri はい

集計パイプライン

集計コマンド

command サポートされています
集計 (aggregate) はい
count はい
distinct はい
mapReduce いいえ

集計ステージ

command サポートされています
$addFields はい
$bucket いいえ
$bucketAuto いいえ
$changeStream はい
$collStats いいえ
$count はい
$currentOp いいえ
$facet はい
$geoNear はい
$graphLookup はい
$group はい
$indexStats いいえ
$limit はい
$listLocalSessions いいえ
$listSessions いいえ
$lookup 部分的
$match はい
$out はい
$project はい
$redact はい
$replaceRoot はい
$replaceWith いいえ
$sample はい
$skip はい
$sort はい
$sortByCount はい
$unwind はい

注意

$lookup では、サーバー バージョン3.6 で導入された非相関サブクエリ機能をまだサポートしていません。 let および pipeline フィールドで $lookup 演算子を使用しようとすると、let is not supported という文字列を含むメッセージが表示されエラーが発生します。

ブール式

command サポートされています
$and はい
$not はい
$or はい

型変換式

command サポートされています
$convert はい
$toBool はい
$toDate はい
$toDecimal はい
$toDouble はい
$toInt はい
$toLong はい
$toObjectId はい
$toString はい

設定式

command サポートされています
$setEquals はい
$setIntersection はい
$setUnion はい
$setDifference はい
$setIsSubset はい
$anyElementTrue はい
$allElementsTrue はい

比較式

command サポートされています
$cmp はい
$eq はい
$gt はい
$gte はい
$lt はい
$lte はい
$ne はい
$in はい
$nin はい

算術式

command サポートされています
$abs はい
$add はい
$ceil はい
$divide はい
$exp はい
$floor はい
$ln はい
$log はい
$log10 はい
$mod はい
$multiply はい
$pow はい
$sqrt はい
$subtract はい
$trunc はい

文字列式

command サポートされています
$concat はい
$indexOfBytes はい
$indexOfCP はい
$ltrim はい
$rtrim はい
$trim はい
$split はい
$strLenBytes はい
$strLenCP はい
$strcasecmp はい
$substr はい
$substrBytes はい
$substrCP はい
$toLower はい
$toUpper はい

テキスト検索演算子

command サポートされています
$meta いいえ

配列式

command サポートされています
$arrayElemAt はい
$arrayToObject はい
$concatArrays はい
$filter はい
$indexOfArray はい
$isArray はい
$objectToArray はい
$range はい
$reverseArray はい
$reduce はい
$size はい
$slice はい
$zip はい
$in はい

変数演算子

command サポートされています
$map はい
$let はい

システム変数

command サポートされています
$$CURRENT はい
$$DESCEND はい
$$KEEP はい
$$PRUNE はい
$$REMOVE はい
$$ROOT はい

リテラル演算子

command サポートされています
$literal はい

日付式

command サポートされています
$dayOfYear はい
$dayOfMonth はい
$dayOfWeek はい
$year はい
$month はい
$week はい
$hour はい
$minute はい
$second はい
$millisecond はい
$dateToString はい
$isoDayOfWeek はい
$isoWeek はい
$dateFromParts いいえ
$dateToParts いいえ
$dateFromString いいえ
$isoWeekYear はい

条件式

command サポートされています
$cond はい
$ifNull はい
$switch はい

データ型演算子

command サポートされています
$type はい

アキュムレータ式

command サポートされています
$sum はい
$avg はい
$first はい
$last はい
$max はい
$min はい
$push はい
$addToSet はい
$stdDevPop はい
$stdDevSamp はい

マージ演算子

command サポートされています
$mergeObjects はい

データ型

Azure Cosmos DB の MongoDB 用 API では、MongoDB BSON 形式でエンコードされたドキュメントをサポートしています。 4.0 API バージョンでは、この形式の内部使用が強化され、パフォーマンスを向上し、コストを削減します。 4.0 を実行しているエンドポイントで作成または更新されたドキュメントは、これによってメリットが得られます。

アップグレード シナリオでは、バージョン 4.0 へのアップグレードの前に作成されたドキュメントでは、4.0 エンドポイント経由の書き込み操作によって更新されるまで、強化されたパフォーマンスのメリットは得られません。

command サポートされています
Double はい
String はい
Object はい
Array はい
Binary Data はい
ObjectId はい
Boolean はい
Date はい
[Null] はい
32 ビット整数 (int) はい
Timestamp はい
64 ビット整数 (long) はい
MinKey はい
MaxKey はい
Decimal128 はい
Regular Expression はい
JavaScript はい
JavaScript (スコープあり) はい
未定義。 はい

インデックスとそのプロパティ

インデックス

command サポートされています
単一フィールド インデックス はい
複合インデックス はい
複数キー インデックス はい
テキスト インデックス いいえ
2dsphere はい
2d インデックス いいえ
ハッシュ インデックス はい

インデックスのプロパティ

command サポートされています
TTL はい
一意 はい
部分的 いいえ
大文字と小文字の区別をしない いいえ
スパース いいえ
バックグラウンド はい

オペレーター

論理演算子

command サポートされています
$or はい
$and はい
$not はい
$nor はい

要素演算子

command サポートされています
$exists はい
$type はい

評価クエリ演算子

command サポートされています
$expr いいえ
$jsonSchema いいえ
$mod はい
$regex はい
$text いいえ (サポートされていません。 代わりに $regex を使用してください)。
$where いいえ

$regex クエリでは、左固定の式でインデックス検索が可能です。 ただし、'i' 修飾子 (大文字と小文字の区別なし) や 'm' 修飾子 (複数行) を使用すると、すべての式でコレクション スキャンが発生します。

'$' または '|' を含める必要がある場合、2 つ (以上) の正規表現クエリを作成することをお勧めします。 たとえば、元のクエリとして find({x:{$regex: /^abc$/}) がある場合、次のように変更する必要があります:

find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})

最初の部分では、インデックスを使用して検索を ^abc で始まるドキュメントに制限し、2 番目の部分で入力そのものを照合します。 バー演算子 '|' は "or" 関数として機能します。そのためクエリ find({x:{$regex: /^abc |^def/}) は、フィールド 'x' の値が "abc" または "def" で始まるドキュメントに一致します。 インデックスを利用するには、find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }) のように、クエリを 2 つの異なるクエリに分割し、$or 演算子で結合することをお勧めします。

配列演算子

command サポートされています
$all はい
$elemMatch はい
$size はい

コメント演算子

command サポートされています
$comment はい

射影演算子

command サポートされています
$elemMatch はい
$meta いいえ
$slice はい

更新演算子

フィールド更新演算子

command サポートされています
$inc はい
$mul はい
$rename はい
$setOnInsert はい
$set はい
$unset はい
$min はい
$max はい
$currentDate はい

配列更新演算子

command サポートされています
$ はい
$[] はい
$[] はい
$addToSet はい
$pop はい
$pullAll はい
$pull はい
$push はい
$pushAll はい

更新修飾子

command サポートされています
$each はい
$slice はい
$sort はい
$position はい

ビット単位更新演算子

command サポートされています
$bit はい
$bitsAllSet いいえ
$bitsAnySet いいえ
$bitsAllClear いいえ
$bitsAnyClear いいえ

地理空間演算子

演算子 サポートされています
$geoWithin はい
$geoIntersects はい
$near はい
$nearSphere はい
$geometry はい
$minDistance はい
$maxDistance はい
$center いいえ
$centerSphere いいえ
$box いいえ
$polygon いいえ

並べ替え操作

findOneAndUpdate 操作を使用する場合、単一フィールドに対する並べ替え操作はサポートされていますが、複数フィールドに対する並べ替え操作はサポートされていません。

一意なインデックス

一意なインデックスによって、特定のフィールドの値が、コレクション内のすべてのドキュメントにわたって重複していないことが保証されます。これは、既定の "_id" キーで一意性が保持される方法と似ています。 Azure Cosmos DB で一意なインデックスを作成するには、unique 制約パラメーターを指定して createIndex コマンドを実行します。

globaldb:PRIMARY> db.coll.createIndex( { "amount" : 1 }, {unique:true} )
{
    "_t" : "CreateIndexesResponse",
    "ok" : 1,
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 4
}

複合インデックス

複合インデックスでは、最大 8 つのフィールドから成るフィールド グループにインデックスを付けることができます。 この種のインデックスは、ネイティブの MongoDB 複合インデックスとは異なります。 Azure Cosmos DB の複合インデックスは、複数のフィールドに適用される並べ替え操作に使用されます。 複合インデックスを作成するには、パラメーターとして複数のプロパティを指定する必要があります。

globaldb:PRIMARY> db.coll.createIndex({"amount": 1, "other":1})
{
    "createdCollectionAutomatically" : false, 
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

GridFS

Azure Cosmos DB では、GridFS と互換性のある Mongo ドライバーを通じて GridFS をサポートしています。

レプリケーション

Cosmos azure DB では、最下位のレイヤーで、自動のネイティブ レプリケーションがサポートされています。 このロジックは、低待機時間のグローバルなレプリケーションも実現するために拡張されています。 Cosmos DB Cosmos では、手動のレプリケーション コマンドはサポートされていません。

再試行可能書き込み

Cosmos DB では、再試行可能書き込みをまだサポートされていません。 クライアント ドライバーは、接続文字列に 'retryWrites=false' URL パラメーターを追加する必要があります。 URL パラメーターを追加するには、'&' でプレフィックスを付ける必要があります。

シャーディング

Azure Cosmos DB は、自動のサーバー側シャーディングをサポートしています。 シャードの作成、配置、バランシングが自動的に管理されます。 Azure Cosmos DB では、手動のシャーディング コマンドはサポートされていません。つまり、addShard、balancerStart、moveChunk などのコマンドを呼び出す必要はありません。必要なことは、コンテナーの作成時やデータの照会時にシャード キーを指定するだけです。

セッション

Azure Cosmos DB では、サーバー側のセッション コマンドはまだサポートされていません。

Time-to-live (TTL)

Azure Cosmos DB では、ドキュメントのタイムスタンプに基づく Time-to-live (TTL) がサポートされます。 Azure portal にアクセスすると、コレクションに対して TTL を有効にできます。

トランザクション

シャード化されていないコレクション内でマルチドキュメント トランザクションがサポートされています。 マルチドキュメント トランザクションは、コレクションまたはシャード コレクションではサポートされていません。 トランザクションのタイムアウトは 5 秒に固定されています。

ユーザーとロールの管理

Azure Cosmos DB では、ユーザーとロールはまだサポートされていません。 ただし、Azure ロールベース アクセス制御 (Azure RBAC) と、Azure portal ([接続文字列] ページ) から取得できる読み取りと書き込みおよび読み取り専用のパスワードとキーがサポートされています。

書き込み確認

一部のアプリケーションでは、書き込み操作中に必要な応答数を指定する書き込み確認が利用されています。 Cosmos DB が背景でレプリケーションを処理する方法により、既定ですべての書き込みが自動的にクォーラムになります。 クライアント コードによって指定される書き込み確認はすべて無視されます。 詳細については、整合性レベルを使用して可用性とパフォーマンスを最大化する方法に関するページを参照してください。

次のステップ