Azure Cosmos DB for MongoDB (バージョン 3.2): サポートされる機能と構文
適用対象: MongoDB
Azure Cosmos DB は、Microsoft のグローバルに分散されたマルチモデル データベース サービスです。 Azure Cosmos DB for MongoDB との通信は、オープン ソースで公開されている任意の MongoDB クライアント ドライバーを使用して行うことができます。 Azure Cosmos DB for MongoDB では、MongoDB ワイヤー プロトコルに従うことにより、既存のクライアント ドライバーを利用できます。
Azure Cosmos DB for MongoDB を使用すれば、使い慣れた MongoDB の利点を活用できます。グローバル配信、自動シャーディング、可用性や待ち時間の保証、すべてのフィールドの自動インデックス作成、保存時の暗号化、バックアップなどを始めとする Azure Cosmos DB のエンタープライズ機能も、すべて利用できます。
注意
バージョン 3.2 の Azure Cosmos DB for MongoDB には、現在、サポート終了 (EOL) の計画はありません。 将来の EOL に関する通知は最低でも 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 では、次のデータベース コマンドがサポートされます。
Note
この記事では、サポートされているサーバー コマンドの一覧のみを示し、クライアント側のラッパー関数については除外しています。 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" で始まるドキュメントに一致します。 インデックスを利用するには、find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] })
のように、クエリを 2 つの異なるクエリに分割し、$or 演算子で結合することをお勧めします。
更新演算子
フィールド更新演算子
$inc
$mul
$rename
$setOnInsert
$set
$unset
$min
$max
$currentDate
配列更新演算子
$addToSet
$pop
$pullAll
$pull
(注: 条件付きの $pull はサポートされていません)$pushAll
$push
$each
$slice
$sort
$position
ビット単位更新演算子
$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 を使用してください。 |
サポートされていない演算子
$where
と $eval
の演算子は、Azure Cosmos DB でサポートされていません。
メソッド
以下のメソッドがサポートされています。
カーソル メソッド
Method | 例 | 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 ロールベースのアクセス制御 (Azure RBAC) と、Azure portal ([接続文字列] ページ) から取得できる読み取り/書き込みおよび読み取り専用のパスワードとキーがサポートされています。
レプリケーション
Cosmos azure DB では、最下位のレイヤーで、自動のネイティブ レプリケーションがサポートされています。 このロジックは、低待機時間のグローバルなレプリケーションも実現するために拡張されています。 Azure Cosmos DB では、手動のレプリケーション コマンドはサポートされていません。
書き込み確認
一部のアプリケーションでは、書き込み操作中に必要な応答数を指定する書き込み確認が利用されています。 Azure Cosmos DB が背景でレプリケーションを処理する方法により、すべての書き込みが既定で自動的に Quorum になります。 クライアント コードによって指定される書き込み確認はすべて無視されます。 詳細については、整合性レベルを使用して可用性とパフォーマンスを最大化する方法に関するページを参照してください。
シャーディング
Azure Cosmos DB は、自動のサーバー側シャーディングをサポートしています。 シャードの作成、配置、バランシングが自動的に管理されます。 Azure Cosmos DB では、手動のシャーディング コマンドはサポートされていません。つまり、shardCollection、addShard、balancerStart、moveChunk などのコマンドを呼び出す必要はありません。必要なことは、コンテナーの作成時やデータの照会時にシャード キーを指定するだけです。
次のステップ
- Azure Cosmos DB for MongoDB と共に Studio 3T を使用する方法を学習します。
- Azure Cosmos DB for MongoDB と共に Robo 3T を使用する方法を学習します。
- Azure Cosmos DB for MongoDB を使用した MongoDB のサンプルを確認します。