次の方法で共有


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

Azure Cosmos DB for MongoDB 4.0 を使用すると、グローバル分散、自動シャーディング、高可用性などのエンタープライズ レベルの機能を備えた使い慣れた MongoDB 機能を使用できます。 この記事では、MongoDB 4.0 用 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 はい

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

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

集計パイプライン

集計コマンド

サポートされています
aggregate はい
count はい
distinct はい
mapReduce ✖️ いいえ

集計ステージ

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

Note

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

ブール式

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

文字列式

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

システム変数

サポートされています
$$CURRENT はい
$$DESCEND はい
$$KEEP はい
$$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 (BSON) 形式でエンコードされたドキュメントがサポートされています。 4\.0 API バージョンでは、この形式の内部使用が強化され、パフォーマンスを向上し、コストを削減します。 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 はい

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

インデックス

サポートされています
Single Field Index はい
Compound Index はい
Multikey Index はい
Text Index ✖️ いいえ
2dsphere はい
2d Index ✖️ いいえ
Hashed Index ✖️ いいえ

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

サポートされています
TTL はい
Unique はい
Partial ✖️ いいえ
Case Insensitive ✖️ いいえ
Sparse ✖️ いいえ
Background はい

オペレーター

論理演算子

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

要素演算子

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

評価クエリ演算子

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

並べ替え操作

MongoDB バージョン 4.0 用 API で findOneAndUpdate 操作を使用すると、単一フィールドと複数フィールドに対する並べ替え操作がサポートされます。 以前のワイヤ プロトコルでは、複数フィールドに対する並べ替え操作は制限されていました。

インデックス作成

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

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 機能を追加します。 また、Microsoft Azure portal の [機能] タブを使用してこの機能を有効にすることもできます。

シャーディング

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

セッション

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

Time-to-Live (TTL)

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

トランザクション

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

ユーザーとロールの管理

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

書き込み確認

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