Azure Cosmos DB for MongoDB (4.2 サーバー バージョン): サポートされる機能と構文

適用対象: MongoDB

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

Azure Cosmos DB for MongoDB を使用することで、使い慣れた MongoDB を活用しながら、グローバル分散自動シャーディング、可用性や待ち時間の保証、保存時の暗号化、バックアップを始めとする 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 では、次のデータベース コマンドがサポートされます。

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

command サポートされています
change streams はい
delete 有効
eval 無効
find イエス
findAndModify イエス
getLastError イエス
getMore 有効
getPrevError 無効
insert イエス
parallelCollectionScan 番号
resetError 番号
update はい

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

Note

マルチドキュメント トランザクションは、シャード化されていない 1 つのコレクション内でのみサポートされます。 MongoDB 用 API では、クロスコレクション およびクロスシャードのマルチドキュメント トランザクションはまだサポートされていません。

コマンド サポートされています
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 はい

集計パイプライン

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

集計コマンド

command サポートされています
aggregate はい
count イエス
distinct 有効
mapReduce いいえ

集計ステージ

command サポートされています
addFields はい
bucket 番号
bucketAuto 番号
changeStream イエス
collStats 無効
count イエス
currentOp 無効
facet イエス
geoNear 有効
graphLookup 無効
group イエス
indexStats 無効
limit イエス
listLocalSessions 番号
listSessions いいえ
lookup Partial
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 が "サポートされていない" ことを示すエラー メッセージが表示されます。

ブール式

command サポートされています
and はい
not イエス
or はい

型変換式

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

設定式

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

比較式

Note

MongoDB 用 API では、クエリ内で配列リテラルを使用した比較式はサポートされていません。

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

算術式

command サポートされています
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 はい

文字列式

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 サポートされています
$$CLUSTERTIME はい
$$CURRENT イエス
$$DESCEND イエス
$$KEEP イエス
$$NOW イエス
$$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 for MongoDB では、MongoDB BSON 形式でエンコードされたドキュメントをサポートしています。 バージョン 4.0 以降 (4.0+) では、この形式の内部使用が強化され、パフォーマンスが向上し、コストが削減されます。 4.0 以降を実行しているエンドポイントで作成または更新されたドキュメントは、この最適化によるメリットが得られます。

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

16 MB のドキュメント サポートでは、ドキュメントのサイズ制限が 2 MB から 16 MB に引き上げられます。 この制限は、この機能が有効になった後に作成されたコレクションにのみ適用されます。 この機能がデータベース アカウントに対して有効になると、無効にすることはできません。

16 MB のドキュメント サポートを有効にするには、Azure portal でリソースの [機能] タブの設定を変更するか、プログラムでEnableMongo16MBDocumentSupport 機能を追加します

より大きなドキュメントの要求が成功するように、サーバー側の再試行を有効にし、ワイルドカード インデックスを使用しないようにすることをお勧めします。 データベースまたはコレクション要求ユニットを上げることも、パフォーマンスに役立つ場合があります。

command サポートされています
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 では、次のインデックス コマンドとインデックス プロパティがサポートされています。

インデックス

command サポートされています
Single Field Index はい
Compound Index イエス
Multikey Index 有効
Text Index 無効
2dsphere イエス
2d Index 番号
Hashed Index No

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

command サポートされています
TTL はい
Unique Yes
Partial 一意なインデックスに対してのみサポートされます
Case Insensitive いいえ
Sparse 番号
Background はい

オペレーター

Azure Cosmos DB for MongoDB では、次の演算子がサポートされます。

論理演算子

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

要素演算子

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

評価クエリ演算子

command サポートされています
expr はい
jsonSchema 無効
mod イエス
regex はい
text いいえ (サポートされていません。代わりに $regex を使用してください。)
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 で始まるドキュメントに一致します。 インデックスを使用するために、次のように $or 演算子によって結合される 2 つの異なるクエリにクエリを分割することをお勧めします。find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] })

配列演算子

command サポートされています
all はい
elemMatch イエス
size はい

コメント演算子

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

射影演算子

command サポートされています
elemMatch はい
meta 無効
slice はい

更新演算子

フィールド更新演算子

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

配列更新演算子

command サポートされています
$ はい
$[] イエス
$[\<identifier\>] イエス
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 操作を使用する場合、単一のフィールドに対する並べ替え操作がサポートされます。 複数のフィールドに対する並べ替え操作はサポートされません。

インデックス作成

MongoDB 用 API では、複数のフィールドでの並べ替えを有効にし、クエリのパフォーマンスを向上させ、一意性を適用するため、さまざまなインデックスがサポートされています

クライアント側のフィールド レベルの暗号化

クライアント レベルのフィールド暗号化は、ドライバーの機能であり、MongoDB 用 API と互換性があります。 書き込み時にドライバーで各フィールドを明示的に暗号化する、明示的な暗号化がサポートされています。 自動暗号化はサポートされていません。 明示的な復号化と自動解読がサポートされます。

サポートされている操作を実行するために必要ではないため、mongocryptd を実行しないでください。

GridFS

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

レプリケーション

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

再試行可能な書き込み

再試行可能な書き込み機能により、MongoDB ドライバーは特定の書き込み操作を自動的に再試行できます。 この機能により、特定の操作について要件がより厳しくなり、MongoDB プロトコルの要件に一致します。 この機能を有効にすると、シャード化されたコレクションでの削除を含む更新操作では、シャード キーをクエリ フィルターまたは更新ステートメントに含める必要があります。

たとえば、"country" キーでシャード化されたシャード コレクションがあるとします。再試行可能書き込み機能が有効になっている場合、"city" = "NYC" というフィールドがあるすべてのドキュメントを削除するために、アプリケーションはすべてのシャード キー ("country") の値に対して操作を実行する必要があります。

  • db.coll.deleteMany({"country": "USA", "city": "NYC"}) - 成功
  • db.coll.deleteMany({"city": "NYC"}) - ShardKeyNotFound(61) エラーで失敗

Note

再試行可能な書き込みは現在、順序付けられていない式の一括書き込みをサポートしていません。 再試行可能な書き込みを有効にして一括書き込みを実行する場合は、順序付けられた一括書き込みを実行します。

この機能を有効にするには、データベース アカウントに EnableMongoRetryableWrites 機能を追加します。 この機能は、Azure portal の [機能] タブを使用して有効にすることもできます。

シャーディング

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

セッション

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

Time to Live

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

カスタム TTL

この機能では、コレクション内の任意の 1 つのフィールドにカスタム TTL を設定できます。

フィールドで TTL が有効になっているコレクションは、以下のようになります。

  • 使用できる型は、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 ロールベースのアクセス制御 (Azure RBAC) と、Azure portal ([接続文字列] ページ) から取得できる読み取り/書き込みおよび読み取り専用のパスワードとキーがサポートされています。

書き込み確認

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

次のステップ