次の方法で共有


Azure Cosmos DB for MongoDB 3.2 サーバー バージョンでサポートされている機能と構文

Azure Cosmos DB for MongoDB 3.2 を使用すると、グローバル分散、自動シャーディング、高可用性などのエンタープライズ レベルの機能を備えた使い慣れた MongoDB 機能を使用できます。 この記事では、MongoDB 3.2 用 Azure Cosmos DB を使用する際にサポートされる機能、構文、および利点について説明します。

Important

Azure Cosmos DB for MongoDB のバージョン 3.2 には、サポート終了の現在のプランはありません。 今後のサポート終了に関する最低限の通知は 3 年間です。

プロトコルのサポート

Azure Cosmos DB for MongoDB のすべての新しいアカウントは、MongoDB サーバー バージョン 3.6 と互換性があります。 この記事では、MongoDB バージョン 3.2 について説明します。 サポートされている演算子と制限事項または例外を次に示します。 これらのプロトコルを認識するすべてのクライアント ドライバーは、Azure Cosmos DB for MongoDB に接続できるはずです。

また、Azure Cosmos DB for MongoDB は、条件を満たすアカウントにシームレスなアップグレード エクスペリエンスも提供します。 詳細については、MongoDB バージョン アップグレード ガイドを参照してください。

クエリ言語のサポート

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

データベース コマンド

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

注意

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

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

サポートされています
delete ✅ はい
find ✅ はい
findAndModify ✅ はい
getLastError ✅ はい
getMore ✅ はい
insert ✅ はい
update ✅ はい

認証コマンド

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

管理コマンド

サポートされています
dropDatabase ✅ はい
listCollections ✅ はい
drop ✅ はい
create ✅ はい
filemd5 ✅ はい
createIndexes ✅ はい
listIndexes ✅ はい
dropIndexes ✅ はい
connectionStatus ✅ はい
reIndex ✅ はい

診断コマンド

サポートされています
buildInfo ✅ はい
collStats ✅ はい
dbStats ✅ はい
hostInfo ✅ はい
listDatabases ✅ はい
whatsmyuri ✅ はい

集計パイプライン

集計コマンド

サポートされています
aggregate ✅ はい
count ✅ はい
distinct ✅ はい

集計ステージ

サポートされています
$project ✅ はい
$match ✅ はい
$limit ✅ はい
$skip ✅ はい
$unwind ✅ はい
$group ✅ はい
$sample ✅ はい
$sort ✅ はい
$lookup ✅ はい
$out ✅ はい
$count ✅ はい
$addFields ✅ はい

集計式

ブール式

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

設定式

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

比較式

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

算術式

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

文字列式

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

配列式

サポートされています
$arrayElemAt ✅ はい
$concatArrays ✅ はい
$filter ✅ はい
$indexOfArray ✅ はい
$isArray ✅ はい
$range ✅ はい
$reverseArray ✅ はい
$size ✅ はい
$slice ✅ はい
$in ✅ はい

日付式

サポートされています
$dayOfYear ✅ はい
$dayOfMonth ✅ はい
$dayOfWeek ✅ はい
$year ✅ はい
$month ✅ はい
$week ✅ はい
$hour ✅ はい
$minute ✅ はい
$second ✅ はい
$millisecond ✅ はい
$isoDayOfWeek ✅ はい
$isoWeek ✅ はい

条件式

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

集計アキュムレータ

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

オペレーター

以下の演算子が、対応するそれらの使用例でサポートされています。 ここでのクエリで使用されているこのサンプル ドキュメントを考えてみましょう。

{
  "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"
}
サポートされています
eq ✅ はい { "Volcano Name": { $eq: "Rainier" } }
gt ✅ はい { "Elevation": { $gt: 4000 } }
gte ✅ はい { "Elevation": { $gte: 4392 } }
lt ✅ はい { "Elevation": { $lt: 5000 } }
lte ✅ はい { "Elevation": { $lte: 5000 } }
ne ✅ はい { "Elevation": { $ne: 1 } }
in ✅ はい { "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } }
nin ✅ はい { "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } }
or ✅ はい { $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] }
and ✅ はい { $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] }
not ✅ はい { "Elevation": { $not: { $gt: 5000 } } }
nor ✅ はい { $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] }
exists ✅ はい { "Status": { $exists: true } }
type ✅ はい { "Status": { $type: "string" } }
mod ✅ はい { "Elevation": { $mod: [ 4, 0 ] } }
regex ✅ はい { "Volcano Name": { $regex: "^Rain"} }

Notes

$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"で始まる値を持つドキュメントと一致します。 インデックスを利用するには、$or演算子によって結合された 2 つの異なるクエリ ( find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] })) にクエリを分割します。

更新演算子

フィールド更新演算子

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

配列更新演算子

サポートされています
$addToSet ✅ はい
$pop ✅ はい
$pullAll ✅ はい
$pull ✅ はい
$pushAll ✅ はい
$push ✅ はい
$each ✅ はい
$slice ✅ はい
$sort ✅ はい
$position ✅ はい

ヒント

$pull 条件付きはサポートされていません。

ビット単位更新演算子

サポートされています
$bit ✅ はい

地理空間演算子

サポートされています
$geoWithin ✅ はい { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } }
$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 ] ] ] } } } }
$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 ] ] ] } } } }
$nearSphere ✅ はい { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } }
$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 ] ] ] } } } }
$minDistance ✅ はい { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } }
$maxDistance ✅ はい { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } }
$center ✅ はい { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } }
$centerSphere ✅ はい { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } }
$box ✅ はい { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } }
$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 ] ] ] } } } }

並べ替え操作

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

その他の演算子

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

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

Azure Cosmos DB for MongoDB では、 $where 演算子と $eval 演算子はサポートされていません。

メソッド

以下のメソッドがサポートされています。

カーソル メソッド

サポートされています Notes
cursor.sort() ✅ はい cursor.sort({ "Elevation": -1 }) 並べ替えキーを持たないドキュメントは返されません

一意なインデックス

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

Azure Cosmos DB for MongoDB を使用すると、すべての Azure Cosmos DB アカウントで一意のインデックスを使用できます。

Time-to-Live (TTL)

Azure Cosmos DB では、バージョン 3.2 のコレクション レベル (_ts) での有効期限 (TTL) のみがサポートされています。 他の形式の TTL を利用するには、バージョン 3.6 以降にアップグレードしてください。

ユーザーとロールの管理

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

レプリケーション

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

書き込み確認

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

シャーディング

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