Azure Cosmos DB for MongoDB 4.2 を使用すると、グローバル分散、自動シャーディング、高可用性などのエンタープライズ レベルの機能を備えた使い慣れた MongoDB 機能を使用できます。 この記事では、MongoDB 4.2 用 Azure Cosmos DB を使用する際にサポートされる機能、構文、および利点について説明します。
プロトコルのサポート
この記事には、サポートされている演算子およびすべての制限事項や例外の一覧があります。 これらのプロトコルを認識するすべてのクライアント ドライバーは、Azure Cosmos DB for MongoDB に接続できるはずです。 Azure Cosmos DB for MongoDB アカウントを作成する際、バージョン 3.6 以上のアカウントには *.mongo.cosmos.azure.com という形式のエンドポイントがあります。 バージョン 3.2 のアカウントには、*.documents.azure.com という形式のエンドポイントがあります。
Note
この記事では、サポートされているサーバー コマンドのみをリストし、クライアント側のラッパー関数については除外しています。
deleteMany() や updateMany() などのクライアント側のラッパー関数は、内部で delete() や update() といったサーバー コマンドを使用しています。 サポートされるサーバー コマンドを使用している関数は、Azure Cosmos DB for MongoDB と互換性があります。
クエリ言語のサポート
Azure Cosmos DB for MongoDB では、MongoDB クエリ言語のコンストラクトが包括的にサポートされます。 以下のセクションでは、現在サポートされている操作、演算子、ステージ、コマンド、およびオプションの詳細な一覧を確認できます。
データベース コマンド
Azure Cosmos DB for MongoDB では、次のデータベース コマンドがサポートされます。
クエリおよび書き込み操作コマンド
| サポートされています | |
|---|---|
change streams |
✅ はい |
delete |
✅ はい |
eval |
✖️ いいえ |
find |
✅ はい |
findAndModify |
✅ はい |
getLastError |
✅ はい |
getMore |
✅ はい |
getPrevError |
✖️ いいえ |
insert |
✅ はい |
parallelCollectionScan |
✖️ いいえ |
resetError |
✖️ いいえ |
update |
✅ はい |
トランザクション コマンド
Note
複数ドキュメント トランザクションは、1 つの非ハード コレクション内でのみサポートされます。 MongoDB 用 API では、クロスコレクション トランザクションとクロスシャード マルチドキュメント トランザクションはまだサポートされていません。
| サポートされています | |
|---|---|
abortTransaction |
✅ はい |
commitTransaction |
✅ はい |
認証コマンド
| サポートされています | |
|---|---|
authenticate |
✅ はい |
getnonce |
✅ はい |
logout |
✅ はい |
管理コマンド
| サポートされています | |
|---|---|
cloneCollectionAsCapped |
✖️ いいえ |
collMod |
✖️ いいえ |
connectionStatus |
✖️ いいえ |
convertToCapped |
✖️ いいえ |
copydb |
✖️ いいえ |
create |
✅ はい |
createIndexes |
✅ はい |
currentOp |
✅ はい |
drop |
✅ はい |
dropDatabase |
✅ はい |
dropIndexes |
✅ はい |
filemd5 |
✅ はい |
killCursors |
✅ はい |
killOp |
✖️ いいえ |
listCollections |
✅ はい |
listDatabases |
✅ はい |
listIndexes |
✅ はい |
reIndex |
✅ はい |
renameCollection |
✖️ いいえ |
診断コマンド
| サポートされています | |
|---|---|
buildInfo |
✅ はい |
collStats |
✅ はい |
connPoolStats |
✖️ いいえ |
connectionStatus |
✖️ いいえ |
dataSize |
✖️ いいえ |
dbHash |
✖️ いいえ |
dbStats |
✅ はい |
explain |
✅ はい |
features |
✖️ いいえ |
hello |
✅ はい |
hostInfo |
✅ はい |
listDatabases |
✅ はい |
listCommands |
✖️ いいえ |
profiler |
✖️ いいえ |
serverStatus |
✖️ いいえ |
top |
✖️ いいえ |
whatsmyuri |
✅ はい |
集計パイプライン
Azure Cosmos DB for MongoDB では、次の集計コマンドがサポートされます。
集計コマンド
| サポートされています | |
|---|---|
aggregate |
✅ はい |
count |
✅ はい |
distinct |
✅ はい |
mapReduce |
✖️ いいえ |
集計ステージ
| サポートされています | |
|---|---|
addFields |
✅ はい |
bucket |
✖️ いいえ |
bucketAuto |
✖️ いいえ |
changeStream |
✅ はい |
collStats |
✖️ いいえ |
count |
✅ はい |
currentOp |
✖️ いいえ |
facet |
✅ はい |
geoNear |
✅ はい |
graphLookup |
✖️ いいえ |
group |
✅ はい |
indexStats |
✖️ いいえ |
limit |
✅ はい |
listLocalSessions |
✖️ いいえ |
listSessions |
✖️ いいえ |
lookup |
❓パーシャル |
match |
✅ はい |
merge |
✅ はい |
out |
✅ はい |
planCacheStats |
✅ はい |
project |
✅ はい |
redact |
✅ はい |
regexFind |
✅ はい |
regexFindAll |
✅ はい |
regexMatch |
✅ はい |
replaceRoot |
✅ はい |
replaceWith |
✅ はい |
sample |
✅ はい |
set |
✅ はい |
skip |
✅ はい |
sort |
✅ はい |
sortByCount |
✅ はい |
unset |
✅ はい |
unwind |
✅ はい |
Note
$lookup集計では、サーバー バージョン 3.6 で導入された相関のないサブクエリ機能はサポートされていません。
letフィールドとpipeline フィールドで $lookup 演算子を使用すると、"letはサポートされていません" というエラー メッセージが表示されます。
ブール式
| サポートされています | |
|---|---|
and |
✅ はい |
not |
✅ はい |
or |
✅ はい |
型変換式
| サポートされています | |
|---|---|
convert |
✅ はい |
toBool |
✅ はい |
toDate |
✅ はい |
toDecimal |
✅ はい |
toDouble |
✅ はい |
toInt |
✅ はい |
toLong |
✅ はい |
toObjectId |
✅ はい |
toString |
✅ はい |
設定式
| サポートされています | |
|---|---|
setEquals |
✅ はい |
setIntersection |
✅ はい |
setUnion |
✅ はい |
setDifference |
✅ はい |
setIsSubset |
✅ はい |
anyElementTrue |
✅ はい |
allElementsTrue |
✅ はい |
比較式
Note
MongoDB 用 API では、クエリに配列リテラルを含む比較式はサポートされていません。
| サポートされています | |
|---|---|
cmp |
✅ はい |
eq |
✅ はい |
gt |
✅ はい |
gte |
✅ はい |
lt |
✅ はい |
lte |
✅ はい |
ne |
✅ はい |
in |
✅ はい |
nin |
✅ はい |
算術式
| サポートされています | |
|---|---|
abs |
✅ はい |
add |
✅ はい |
ceil |
✅ はい |
divide |
✅ はい |
exp |
✅ はい |
floor |
✅ はい |
ln |
✅ はい |
log |
✅ はい |
log10 |
✅ はい |
mod |
✅ はい |
multiply |
✅ はい |
pow |
✅ はい |
round |
✅ はい |
sqrt |
✅ はい |
subtract |
✅ はい |
trunc |
✅ はい |
三角法式
| サポートされています | |
|---|---|
acos |
✅ はい |
acosh |
✅ はい |
asin |
✅ はい |
asinh |
✅ はい |
atan |
✅ はい |
atan2 |
✅ はい |
atanh |
✅ はい |
cos |
✅ はい |
cosh |
✅ はい |
degreesToRadians |
✅ はい |
radiansToDegrees |
✅ はい |
sin |
✅ はい |
sinh |
✅ はい |
tan |
✅ はい |
tanh |
✅ はい |
文字列式
| サポートされています | |
|---|---|
concat |
✅ はい |
indexOfBytes |
✅ はい |
indexOfCP |
✅ はい |
ltrim |
✅ はい |
rtrim |
✅ はい |
trim |
✅ はい |
split |
✅ はい |
strLenBytes |
✅ はい |
strLenCP |
✅ はい |
strcasecmp |
✅ はい |
substr |
✅ はい |
substrBytes |
✅ はい |
substrCP |
✅ はい |
toLower |
✅ はい |
toUpper |
✅ はい |
テキスト検索演算子
| サポートされています | |
|---|---|
meta |
✖️ いいえ |
配列式
| サポートされています | |
|---|---|
arrayElemAt |
✅ はい |
arrayToObject |
✅ はい |
concatArrays |
✅ はい |
filter |
✅ はい |
indexOfArray |
✅ はい |
isArray |
✅ はい |
objectToArray |
✅ はい |
range |
✅ はい |
reverseArray |
✅ はい |
reduce |
✅ はい |
size |
✅ はい |
slice |
✅ はい |
zip |
✅ はい |
in |
✅ はい |
変数演算子
| サポートされています | |
|---|---|
map |
✅ はい |
let |
✅ はい |
システム変数
| サポートされています | |
|---|---|
$$CLUSTERTIME |
✅ はい |
$$CURRENT |
✅ はい |
$$DESCEND |
✅ はい |
$$KEEP |
✅ はい |
$$NOW |
✅ はい |
$$PRUNE |
✅ はい |
$$REMOVE |
✅ はい |
$$ROOT |
✅ はい |
リテラル演算子
| サポートされています | |
|---|---|
literal |
✅ はい |
日付式
| サポートされています | |
|---|---|
dayOfYear |
✅ はい |
dayOfMonth |
✅ はい |
dayOfWeek |
✅ はい |
year |
✅ はい |
month |
✅ はい |
week |
✅ はい |
hour |
✅ はい |
minute |
✅ はい |
second |
✅ はい |
millisecond |
✅ はい |
dateToString |
✅ はい |
isoDayOfWeek |
✅ はい |
isoWeek |
✅ はい |
dateFromParts |
✅ はい |
dateToParts |
✅ はい |
dateFromString |
✅ はい |
isoWeekYear |
✅ はい |
条件式
| サポートされています | |
|---|---|
cond |
✅ はい |
ifNull |
✅ はい |
switch |
✅ はい |
データ型演算子
| サポートされています | |
|---|---|
type |
✅ はい |
アキュムレータ式
| サポートされています | |
|---|---|
sum |
✅ はい |
avg |
✅ はい |
first |
✅ はい |
last |
✅ はい |
max |
✅ はい |
min |
✅ はい |
push |
✅ はい |
addToSet |
✅ はい |
stdDevPop |
✅ はい |
stdDevSamp |
✅ はい |
マージ演算子
| サポートされています | |
|---|---|
mergeObjects |
✅ はい |
データ型
Azure Cosmos DB for MongoDB では、MongoDB バイナリ JSON 形式でエンコードされたドキュメントがサポートされています。 バージョン 4.0 以降 (4.0+) では、この形式の内部使用が強化され、パフォーマンスが向上し、コストが削減されます。 4.0 以降を実行しているエンドポイントで作成または更新されたドキュメントは、この最適化によるメリットが得られます。
バージョン 4.0 以降へのアップグレード シナリオでは、アップグレード前に作成されたドキュメントは、パフォーマンスの向上のメリットをすぐには得られません。 機能強化を利用するには、4.0 エンドポイントを使用して書き込み操作を通じてこれらのドキュメントを更新します。
16 MB のドキュメント サポートでは、ドキュメントのサイズ制限が 2 MB から 16 MB に引き上げされます。 この制限は、機能を有効にした後に作成されたコレクションにのみ適用されます。 データベース アカウントに対してこの機能を有効にした後は、無効にすることはできません。
16 MB のドキュメント サポートを有効にするには、Azure portal でリソースの [機能] タブの設定を変更するか、プログラムでEnableMongo16MBDocumentSupport 機能を追加します。
より大きなドキュメントの要求が成功するように、サーバー側の再試行を有効にし、ワイルドカード インデックスを使用しないようにすることをお勧めします。 データベースまたはコレクション要求ユニットを上げることも、パフォーマンスに役立つ場合があります。
| サポートされています | |
|---|---|
Double |
✅ はい |
String |
✅ はい |
Object |
✅ はい |
Array |
✅ はい |
Binary Data |
✅ はい |
ObjectId |
✅ はい |
Boolean |
✅ はい |
Date |
✅ はい |
Null |
✅ はい |
32-bit Integer (int) |
✅ はい |
Timestamp |
✅ はい |
64-bit Integer (long) |
✅ はい |
MinKey |
✅ はい |
MaxKey |
✅ はい |
Decimal128 |
✅ はい |
Regular Expression |
✅ はい |
JavaScript |
✅ はい |
JavaScript (with scope) |
✅ はい |
Undefined |
✅ はい |
インデックスとそのプロパティ
Azure Cosmos DB for MongoDB では、次のインデックス コマンドとインデックス プロパティがサポートされています。
インデックス
| サポートされています | |
|---|---|
Single Field Index |
✅ はい |
Compound Index |
✅ はい |
Multikey Index |
✅ はい |
Text Index |
✖️ いいえ |
2dsphere |
✅ はい |
2d Index |
✖️ いいえ |
Hashed Index |
✖️ いいえ |
インデックスのプロパティ
| サポートされています | |
|---|---|
TTL |
✅ はい |
Unique |
✅ はい |
Partial |
❓パーシャル |
Case Insensitive |
✖️ いいえ |
Sparse |
✖️ いいえ |
Background |
✅ はい |
ヒント
Partial は、一意のインデックスに対してのみサポートされます。
オペレーター
Azure Cosmos DB for MongoDB では、次の演算子がサポートされます。
論理演算子
| サポートされています | |
|---|---|
or |
✅ はい |
and |
✅ はい |
not |
✅ はい |
nor |
✅ はい |
要素演算子
| サポートされています | |
|---|---|
exists |
✅ はい |
type |
✅ はい |
評価クエリ演算子
| サポートされています | |
|---|---|
expr |
✅ はい |
jsonSchema |
✖️ いいえ |
mod |
✅ はい |
regex |
✅ はい |
text |
✖️ いいえ |
where |
✖️ いいえ |
$regex クエリでは、左固定の式でインデックス検索が可能です。 ただし、i 修飾子 (大文字と小文字の区別なし) や m 修飾子 (複数行) を使用すると、すべての式でコレクションのスキャンが発生します。
$ または | を含める必要がある場合、2 つ (以上) の $regex クエリを作成することをお勧めします。
たとえば、次の元のクエリを変更します。
find({x:{$regex: /^abc$/})
次のクエリにします。
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
変更されたクエリの最初の部分では、インデックスを使用して、検索を ^abc で始まるドキュメントに制限しています。 クエリの 2 番目の部分は、正確なエントリと一致します。 バー演算子 (|) は、 or 関数として機能します。 クエリ find({x:{$regex: /^abc |^def/}) は、フィールド x の値が abc または def で始まるドキュメントに一致します。 インデックスを使用するには、クエリを 2 つの個別のクエリに分割し、 $or 演算子 ( find({$or: [{x: {$regex: /^abc/}}, {x: {$regex: /^def/}}]})) と結合します。
ヒント
text コマンドはサポートされていません。
$regex を代わりに使用します。
配列演算子
| サポートされています | |
|---|---|
all |
✅ はい |
elemMatch |
✅ はい |
size |
✅ はい |
コメント演算子
| サポートされています | |
|---|---|
comment |
✅ はい |
射影演算子
| サポートされています | |
|---|---|
elemMatch |
✅ はい |
meta |
✖️ いいえ |
slice |
✅ はい |
更新演算子
フィールド更新演算子
| サポートされています | |
|---|---|
inc |
✅ はい |
mul |
✅ はい |
rename |
✅ はい |
setOnInsert |
✅ はい |
set |
✅ はい |
unset |
✅ はい |
min |
✅ はい |
max |
✅ はい |
currentDate |
✅ はい |
配列更新演算子
| サポートされています | |
|---|---|
$ |
✅ はい |
$[] |
✅ はい |
$[\<identifier\>] |
✅ はい |
addToSet |
✅ はい |
pop |
✅ はい |
pullAll |
✅ はい |
pull |
✅ はい |
push |
✅ はい |
pushAll |
✅ はい |
更新修飾子
| サポートされています | |
|---|---|
each |
✅ はい |
slice |
✅ はい |
sort |
✅ はい |
position |
✅ はい |
ビット単位更新演算子
| サポートされています | |
|---|---|
bit |
✅ はい |
bitsAllSet |
✖️ いいえ |
bitsAnySet |
✖️ いいえ |
bitsAllClear |
✖️ いいえ |
bitsAnyClear |
✖️ いいえ |
地理空間演算子
| サポートされています | |
|---|---|
$geoWithin |
✅ はい |
$geoIntersects |
✅ はい |
$near |
✅ はい |
$nearSphere |
✅ はい |
$geometry |
✅ はい |
$minDistance |
✅ はい |
$maxDistance |
✅ はい |
$center |
✖️ いいえ |
$centerSphere |
✖️ いいえ |
$box |
✖️ いいえ |
$polygon |
✖️ いいえ |
並べ替え操作
findOneAndUpdate 操作を使用する場合、単一のフィールドに対する並べ替え操作がサポートされます。 複数のフィールドに対する並べ替え操作はサポートされません。
インデックス作成
MongoDB 用 API では、複数のフィールドでの並べ替えを有効にし、クエリのパフォーマンスを向上させ、一意性を適用するため、さまざまなインデックスがサポートされています。
クライアント側のフィールド レベルの暗号化
クライアント レベルのフィールド暗号化はドライバー機能であり、MongoDB 用 Azure Cosmos DB で動作します。 ドライバーが書き込み操作中に各フィールドを暗号化する明示的な暗号化がサポートされています。 自動暗号化はサポートされていません。 明示的な暗号化解除と自動復号化がサポートされています。
サポートされている操作を実行するために必要ではないため、mongocryptd を実行しないでください。
GridFS
Azure Cosmos DB では、GridFS と互換性のある Mongo ドライバーを通じて GridFS をサポートしています。
レプリケーション
Cosmos azure DB では、最下位のレイヤーで、自動のネイティブ レプリケーションがサポートされています。 このロジックは、低待機時間のグローバルなレプリケーションを実現するためにも拡張されています。 Azure Cosmos DB では、手動のレプリケーション コマンドはサポートされていません。
再試行可能な書き込み
再試行可能な書き込み機能により、MongoDB ドライバーは特定の書き込み操作を自動的に再試行できます。 この機能により、特定の操作について要件がより厳しくなり、MongoDB プロトコルの要件に一致します。 この機能を有効にすると、シャード化されたコレクションでの削除を含む更新操作では、シャード キーをクエリ フィルターまたは更新ステートメントに含める必要があります。
たとえば、キー regionでシャード化されたシャード コレクションの場合: フィールド city = "NYC"を持つすべてのドキュメントを削除するには、再試行可能な書き込みが有効になっている場合、アプリケーションはすべてのシャード キー (リージョン) 値に対して操作を実行する必要があります。
-
db.coll.deleteMany({"region": "USA", "city": "NYC"})- メッセージで成功しますSuccess -
db.coll.deleteMany({"city": "NYC"})- エラーで失敗するShardKeyNotFound(61)
Note
再試行可能な書き込み機能では、現時点では一括順序なし書き込みをサポートしていません。 再試行可能な書き込みを有効にして一括書き込みを実行する場合は、順序付けられた一括書き込みを実行します。
この機能を有効にするには、データベース アカウントに EnableMongoRetryableWrites 機能を追加します。 この機能は、Azure portal の [機能] タブを使用して有効にすることもできます。
シャーディング
Azure Cosmos DB は、自動のサーバー側シャーディングをサポートしています。 シャードの作成、配置、バランシングが自動的に管理されます。 Azure Cosmos DB では手動シャーディング コマンドはサポートされていません。つまり、addShard、balancerStart、moveChunk などのコマンドを呼び出す必要はありません。 コンテナーの作成時やデータの照会時にのみシャード キーを指定する必要があります。
セッション
Azure Cosmos DB では、サーバー側のセッション コマンドはまだサポートされていません。
Time to Live
Azure Cosmos DB では、ドキュメントのタイムスタンプに基づいて Time to Live (TTL) 機能が提供されます。 Azure portal でコレクションの TTL を有効にします。
カスタム TTL
この機能を使用すると、コレクション内の 1 つのフィールドにカスタム TTL 値を指定できます。 ドキュメントは、このフィールドの値に基づいて有効期限が切れます。
フィールドで TTL が有効になっているコレクションは、以下のようになります。
使用できる型は、バイナリ JSON (BSON) データ型と数値型 (整数、long、または double) です。これは、有効期限を決定するために Unix ミリ秒のタイム スタンプとして解釈されます。
TTL フィールドが配列の場合、許容される型の配列の最小要素はドキュメントの有効期限と見なされます。
TTL フィールドがドキュメントにない場合、ドキュメントの有効期限は切れません。
TTL フィールドが許容可能な型でない場合、ドキュメントの有効期限は切れません。
カスタム TTL の制限事項
コレクション内の 1 つのフィールドに 1 つだけ TTL を設定できます。
カスタム TTL フィールドが設定されている場合、
\_tsフィールドはドキュメントの有効期限に使用できません\_tsフィールドを追加で使用することはできません。
構成
アカウントの EnableTtlOnCustomPath 機能を更新することで、カスタム TTL を有効にできます。
機能を構成する方法を参照してください。
TTL を設定する
TTL を設定するには、次のコマンドを実行します。db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})
トランザクション
シャード化されていないコレクション内でマルチドキュメント トランザクションがサポートされています。 マルチドキュメント トランザクションは、コレクションまたはシャード コレクションではサポートされていません。 トランザクションのタイムアウトは 5 秒に固定されています。
ユーザーとロールを管理する
Azure Cosmos DB では、ユーザーとロールはまだサポートされていません。 ただし、Azure Cosmos DB では、Azure portal ([接続文字列] ページ) から取得できる Azure ロールベースのアクセス制御と、読み取り/書き込みおよび読み取り専用のパスワードとキーがサポートされています。
書き込み確認
一部のアプリケーションでは、書き込み操作中に要求される応答数を指定する書き込み確認が利用されています。 Azure Cosmos DB が背景でレプリケーションを処理する方法により、すべての書き込みが既定で自動的に Quorum になります。 Azure Cosmos DB は、クライアント コードで指定された書き込み問題を無視します。 整合性レベルを使用して可用性とパフォーマンスを最大化する方法について確認してください。