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 |
はい |
テキスト検索演算子
配列式
|
サポートされています |
arrayElemAt |
はい |
arrayToObject |
はい |
concatArrays |
はい |
filter |
はい |
indexOfArray |
はい |
isArray |
はい |
objectToArray |
はい |
range |
はい |
reverseArray |
はい |
reduce |
はい |
size |
はい |
slice |
はい |
zip |
はい |
in |
はい |
変数演算子
システム変数
|
サポートされています |
$$CURRENT |
はい |
$$DESCEND |
はい |
$$KEEP |
はい |
$$PRUNE |
はい |
$$REMOVE |
はい |
$$ROOT |
はい |
リテラル演算子
日付式
|
サポートされています |
dayOfYear |
はい |
dayOfMonth |
はい |
dayOfWeek |
はい |
year |
はい |
month |
はい |
week |
はい |
hour |
はい |
minute |
はい |
second |
はい |
millisecond |
はい |
dateToString |
はい |
isoDayOfWeek |
はい |
isoWeek |
はい |
dateFromParts |
はい |
dateToParts |
はい |
dateFromString |
はい |
isoWeekYear |
はい |
条件式
|
サポートされています |
cond |
はい |
ifNull |
はい |
switch |
はい |
データ型演算子
アキュムレータ式
|
サポートされています |
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 |
はい |
射影演算子
|
サポートされています |
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 では手動シャーディング コマンドはサポートされていません。つまり、 addShard、 balancerStart、 moveChunkなどのコマンドを呼び出す必要はありません。 必要なのは、コンテナーの作成中またはデータのクエリ中にシャード キーを指定することだけです。
セッション
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 になります。 クライアント コードによって指定される書き込み確認はすべて無視されます。 詳細については、整合性レベルを使用して可用性とパフォーマンスを最大化する方法に関するページを参照してください。