3 MongoDB API、操作およびデータ型のサポート — リファレンス
Oracle DatabaseでサポートされているMongoDB API、操作およびデータ型、ならびにそのサポートに関する情報を示します。
サポートされていないMongoDBコンストラクトではエラーが発生します。このドキュメントでは、無視されるコンストラクトをno-opとしてリストしています(エラーは発生しません)。Oracleアーキテクチャにおいて意味がないか不要であるコンストラクトは無視できます。
ノート:
サーバー・コマンドのみが対象であり、クライアント側のラッパー関数は対象外です。deleteMany()やupdateMany()などのクライアント側のラッパー関数では、サーバー・コマンドdelete()およびupdate()を内部的に使用します。
ノート:
Oracle Database API for MongoDBでは、MongoDBデータベースに大きなファイルを格納するための仕様である、GridFSがサポートされています。
- データベース・コマンド
MongoDBデータベース・コマンドのサポートについて説明します。これには、管理、集計、認証、診断、問合せおよび書込み操作、ロール管理、レプリケーション、セッション、ユーザー管理およびシャーディングのためのコマンドが含まれます。 - 問合せ演算子および投影演算子
MongoDBの問合せ演算子および投影演算子のサポートについて説明します。これには、配列演算子、ビット単位演算子、コメント演算子、比較演算子、要素演算子、評価演算子、地理空間演算子および論理問合せ演算子に加え、投影演算子が含まれます。 - 更新演算子
MongoDB更新演算子のサポートについて説明します。これには、配列演算子、ビット単位演算子、フィールド更新演算子および修飾子更新演算子が含まれます。 - カーソル・メソッド
MongoDBのカーソル・メソッドのサポートについて説明します。 - 集計パイプライン・ステージ
MongoDB集計パイプライン・ステージのサポートについて説明します。 - 集計パイプライン演算子
MongoDB集計パイプライン演算子のサポートについて説明します。 - データ型
MongoDBのデータ型のサポートについて説明します。 - 索引および索引プロパティ
MongoDBの索引および索引プロパティのサポートについて説明します。
3.1 データベース・コマンド
MongoDBデータベース・コマンドのサポートについて説明します。これには、管理、集計、認証、診断、問合せおよび書込み操作、ロール管理、レプリケーション、セッション、ユーザー管理およびシャーディングのためのコマンドが含まれます。
関連項目:
MongoDBリファレンス・マニュアルのデータベース・コマンド
表3-1 管理コマンド
| コマンド | サポート(開始時期) | ノート |
|---|---|---|
| 制限付きコレクション | なし | なし。 |
cloneCollectionAsCapped |
なし | なし。 |
collMod |
なし | なし。 |
collMod、expireAfterSeconds |
なし | なし。 |
convertToCapped |
なし | なし。 |
create |
19c |
現在のOracle Databaseスキーマにコレクションを作成します。指定されたコレクションがすでに存在する場合、これはno-opです。 |
createView |
なし | なし。 |
createIndexes |
23ai.No-op (19c) | なし。 |
currentOp |
なし | なし。 |
|
|
19c | なし。 |
dropDatabase |
19c |
現在のOracle Databaseスキーマ内のすべてのコレクションを削除します。スキーマ自体は削除(ドロップ)しません。 このコマンドは、ロール |
dropIndexes |
23ai.No-op (19c) | なし。 |
filemd5 |
なし | なし。 |
getParameter |
19c | サポートされているパラメータ: authenticationMechanisms |
killCursors |
19c |
サポートされているフィールド: |
killOp |
なし | なし。 |
listCollections |
19c |
現在のOracle Databaseスキーマのコレクションをリストします。 |
listDatabases |
19c |
Oracle Database API for MongoDBおよびSimple Oracle Document Access (SODA)からアクセス可能なOracle Databaseスキーマをリストします。 |
listIndexes |
19c |
指定されたコレクションに関連するOracle Database索引をリストします。 |
reIndex |
No-op | なし。 |
renameCollection |
なし | なし。 |
setParameter |
No-op | 無視(エラーなし)。 |
validate |
19c | なし。 |
repairDatabase |
No-op | 無視(エラーなし)。 |
ノート:
コマンドcreateを明示的に使用してコレクションを作成する以外に、ドキュメントを初めて挿入すると、コレクションが自動的に作成されます。つまり、コレクションは、ドキュメントを挿入するときにその名前を参照することで作成できます。
関連項目:
MongoDBリファレンス・マニュアルの管理コマンド
表3-2 集計コマンド
| コマンド | サポート(開始時期) | ノート |
|---|---|---|
aggregate |
19c | なし。 |
count |
19c |
サポートされているフィールド: |
distinct |
19c |
サポートされているフィールド:
|
mapReduce |
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの集計コマンド
表3-3 認証コマンド
| コマンド | サポート(開始時期) | ノート |
|---|---|---|
logout |
19c | 特定のポートでOracle Databaseスキーマの現在のユーザーをログアウトさせます。 |
関連項目:
表3-4 診断コマンド
| コマンド | サポート(開始時期) | ノート |
|---|---|---|
buildInfo |
19c |
Oracle Database API for MongoDBの現在のビルドに関する情報を返します。 |
collStats |
19c | なし。 |
compact |
No-op | 無視(エラーなし)。 |
connPoolStats |
なし | なし。 |
connectionStatus |
19c | なし。 |
dataSize |
23ai | サポートされているフィールド: estimate、keyPattern、min、max。
|
dbHash |
なし | なし。 |
dbStats |
19c |
サポートされているフィールド: Oracle Databaseスキーマに関する統計(そのコレクションおよび関連する索引)をリストします。 |
explain |
19c | なし。 |
explain、executionStats |
19c | なし。 |
features |
なし | なし。 |
getLog |
No-op | 無視(エラーなし)。 |
hostInfo |
19c | なし。 |
listCommands |
19c | なし。 |
ping |
19c | なし。 |
profiler |
なし | なし。 |
serverStatus |
19c | なし。 |
top |
なし | なし。 |
whatsmyuri |
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの診断コマンド
表3-5 問合せおよび書込み操作のコマンド
| コマンド | サポート(開始時期) | ノート |
|---|---|---|
| 変更ストリーム | なし | なし。 |
delete |
19c |
コマンド |
find |
19c |
コマンド |
findAndModify |
19c |
コマンド |
getLastError |
19c | なし。 |
getMore |
19c |
サポートされているフィールド: |
getPrevError |
なし | なし。 |
GridFS |
19c | なし。 |
insert |
19c |
サポートされているフィールド: |
parallelCollectionScan |
なし | なし。 |
ReplaceOne |
なし | なし。 |
resetError |
19c | なし。 |
update |
19c |
返されるレスポンスに含まれるフィールド |
ノート:
コマンドfindのサポート。
-
サポートされる演算子: コマンド
delete、find、findAndModifyおよびupdateでサポートされる問合せ演算子を参照してください。 -
サポートされているフィールド:
batchSize、filter、limit、projection、returnKey、singleBatch、skip、sort。フィールド
returnKeyは、見つかったドキュメントに関連付けられた主キー(ObjectIDなど)のみを返すことができます。問合せをサポートするために索引を使用している場合、このコマンドを使用して索引キーのみを返すことはできません。 -
$は、projection仕様では使用できません。単純なフィールド選択または省略のみを実行できます。 -
$typeに指定できるJSONスカラー型は次のとおりです。-
string(デフォルト) -
number -
date— 時間コンポーネントがない日付。 -
dateTime— タイムスタンプ: 時間コンポーネントを含む日付。
-
JSON値のソート:
-
Oracle Database 23ai以降: JSON値は標準的なソート順を使用してソートされます。JSONデータ型値の比較およびソートを参照してください。
-
Oracle Database 19c: デフォルトでは、ソートは辞書順です。JSON値は文字列を取得するためにシリアル化され、その後比較されます。
数値順序、日付順序またはタイムスタンプ順序をリクエストするには、
hintを使用して、$typeに関連するJSONスカラー型を指定します。たとえば、次のコードはフィールド
nameには辞書式順序の昇順ソート、フィールドageには数値の昇順ソート、フィールドbirthdayには日時の降順(つまり逆時系列順)ソートをリクエストします。(正の数(1など)は昇順を意味し、負の数(-1など)は降順を意味します。)find().sort({"name":1, "age":1, "birthday":-1}).hint({"$type":{"age":"number", "birthday":"dateTime"}})
ノート:
コマンドdelete、find、findAndModifyおよびupdateでサポートされる問合せ演算子。
-
比較と論理:
$eq、$gt、$gte、$in、$lt、$lte、$ne、$nin、$and、$not、$norおよび$or。 -
要素と評価:
$type、$regexおよび$text。 -
地理空間:
$geoIntersects、$geoWithin、$near、$nearSphere。 -
配列:
$all、$elemMatch。
関連項目:
MongoDBリファレンス・マニュアルの問合せおよび書込み操作のコマンド
表3-6 ロール管理コマンド
| コマンド | サポート(開始時期) | ノート |
|---|---|---|
createRole |
なし | なし。 |
dropRole |
なし | なし。 |
dropAllRolesFromDatabase |
なし | なし。 |
grantRolesToRole |
なし | なし。 |
revokePrivilegesFromRole |
なし | なし。 |
updateRole |
なし | なし。 |
rolesInfo |
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのロール管理コマンド
表3-7 レプリケーション・コマンド
| コマンド | サポート(開始時期) | ノート |
|---|---|---|
hello |
19c | なし。 |
isMaster |
19c | なし。 |
replSetGetStatus |
No-op | 無視(エラーなし)。 |
関連項目:
MongoDBリファレンス・マニュアルのレプリケーション・コマンド
Table 3-8 セッション・コマンド
| コマンド | サポート(開始時期) | ノート |
|---|---|---|
abortTransaction |
19c | なし。 |
commitTransaction |
19c | なし。 |
endSessions |
19c | なし。 |
killAllSessions |
19c | なし。 |
killAllSessionsByPattern |
19c | なし。 |
killSessions |
19c | なし。 |
refreshSessions |
19c | なし。 |
startSession |
19c |
サーバー側セッションを開始します。クライアントによって作成されたUUID (指定されている場合)、またはセキュアでランダムなUUIDを使用します。使用されているUUIDを返します。 |
関連項目:
MongoDBリファレンス・マニュアルのセッション・コマンド
表3-9 ユーザー管理コマンド
| コマンド | サポート(開始時期) | ノート |
|---|---|---|
createUser |
なし | なし。 |
dropAllUsersFromDatabase |
なし | なし。 |
dropUser |
なし | なし。 |
grantRolesToUser |
なし | なし。 |
revokeRolesFromUser |
なし | なし。 |
updateUser |
なし | なし。 |
userInfo |
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのユーザー管理コマンド
表3-10 シャーディング・コマンド
| コマンド | サポート(開始時期) | ノート |
|---|---|---|
abortReshardCollection |
なし | なし。 |
addShard |
なし | なし。 |
addShardZone |
なし | なし。 |
balancerCollectionStatus |
なし | なし。 |
balancerStart |
なし | なし。 |
balancerStatus |
なし | なし。 |
balancerStop |
なし | なし。 |
checkShardingIndex |
なし | なし。 |
clearJumboFlag |
なし | なし。 |
cleanupOrphaned |
なし | なし。 |
cleanupReshardCollection |
なし | なし。 |
commitReshardCollection |
なし | なし。 |
enableSharding |
なし | なし。 |
flushRouterConfig |
なし | なし。 |
getShardMap |
なし | なし。 |
getShardVersion |
なし | なし。 |
isdbGrid |
なし | なし。 |
listShards |
なし | なし。 |
medianKey |
なし | なし。 |
moveChunk |
なし | なし。 |
movePrimary |
なし | なし。 |
mergeChunks |
なし | なし。 |
refineCollectionShardKey |
なし | なし。 |
removeShard |
なし | なし。 |
removeShardFromZone |
なし | なし。 |
reshardCollection |
なし | なし。 |
setAllowMigrations |
なし | なし。 |
setShardVersion |
なし | なし。 |
shardCollection |
なし | なし。 |
shardingState |
なし | なし。 |
split |
なし | なし。 |
splitVector |
なし | なし。 |
unsetSharding |
なし | なし。 |
updateZoneKeyRange |
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのシャーディング・コマンド
3.2 問合せ演算子および投影演算子
MongoDBの問合せ演算子および投影演算子のサポートについて説明します。これには、配列演算子、ビット単位演算子、コメント演算子、比較演算子、要素演算子、評価演算子、地理空間演算子および論理問合せ演算子に加え、投影演算子が含まれます。
関連項目:
MongoDBリファレンス・マニュアルの問合せ演算子および投影演算子
表3-11 配列問合せ演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの配列問合せ演算子
表3-12 ビット単位問合せ演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
|
|
なし | なし。 |
|
|
なし | なし。 |
|
|
なし | なし。 |
|
|
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのビット単位問合せ演算子
表3-13 比較問合せ演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの比較問合せ演算子
表3-14 要素問合せ演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
|
|
19c | なし。 |
|
|
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの要素問合せ演算子
表3-15 評価問合せ演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
|
|
なし | なし。 |
|
|
なし | なし。 |
|
|
23ai | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの評価問合せ演算子
表3-16 地理空間問合せ演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$box |
なし | なし。 |
$center |
なし | なし。 |
$centerSphere |
なし | なし。 |
$geoIntersects |
19c | なし。 |
$geometry |
なし | なし。 |
$geoWithin |
19c | なし。 |
$maxDistance |
なし | なし。 |
$near |
19c | なし。 |
$nearSphere |
19c | なし。 |
$polygon |
なし | なし。 |
$uniqueDocs |
なし | なし。 |
表3-17 論理問合せ演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの論理問合せ演算子
表3-18 投影演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
|
|
19c | なし。 |
|
|
なし | なし。 |
|
|
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの投影演算子
3.3 更新演算子
MongoDB更新演算子のサポートについて説明します。これには、配列演算子、ビット単位演算子、フィールド更新演算子および修飾子更新演算子が含まれます。
表3-19 配列更新演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
関連項目:
表3-20 ビット単位更新演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
|
|
19c | なし。 |
ノート:
MongoDBリファレンス・マニュアルのビット単位の更新
表3-21 フィールド更新演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのフィールドの更新
表3-22 修飾子更新演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
|
|
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの更新演算子
3.4 カーソル・メソッド
MongoDBのカーソル・メソッドのサポートについて説明します。
表3-23 カーソル・メソッド
| メソッド | サポート(開始時期) | ノート |
|---|---|---|
$cursor.batchSize() |
19c | なし。 |
$cursor.close() |
19c | なし。 |
$cursor.collation() |
なし | なし。 |
$cursor.comment() |
19c | なし。 |
$cursor.count() |
19c | なし。 |
$cursor.explain() |
19c | なし。 |
$cursor.forEach() |
19c | なし。 |
$cursor.hasNext() |
19c | なし。 |
$cursor.hint() |
19c | なし。 |
$cursor.isClosed() |
19c | なし。 |
$cursor.isExhausted() |
19c | なし。 |
$cursor.itcount() |
19c | なし。 |
$cursor.limit() |
19c | なし。 |
$cursor.map() |
19c | なし。 |
$cursor.max() |
19c | なし。 |
$cursor.maxScan() |
なし | なし。 |
$cursor.maxTimeMS() |
19c | なし。 |
$cursor.min() |
19c | なし。 |
$cursor.next() |
19c | なし。 |
$cursor.noCursorTimeout() |
19c | なし。 |
$cursor.objsLeftInBatch() |
19c | なし。 |
$cursor.pretty() |
19c | なし。 |
$cursor.readConcern() |
19c | なし。 |
$cursor.readPref() |
19c | なし。 |
$cursor.returnKey() |
19c | なし。 |
$cursor.showRecordId() |
19c | なし。 |
$cursor.size() |
19c | なし。 |
$cursor.skip() |
19c | なし。 |
$cursor.sort() |
19c | なし。 |
$cursor.tailable() |
19c | なし。 |
$cursor.toArray() |
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのカーソル・メソッド
3.5 集計パイプライン・ステージ
MongoDB集計パイプライン・ステージのサポートについて説明します。
関連項目:
MongoDBリファレンス・マニュアルの集計パイプライン・ステージ
表3-24 ステージ
| ステージ | サポート(開始時期) | ノート |
|---|---|---|
$addFields |
23ai | 別名: $set。
|
$bucket |
23ai | なし。 |
$bucketAuto |
なし | なし。 |
$collStats |
19c |
指定されたコレクションおよびそれに関連するOracle Database索引に関する統計をリストします。 サポートされているフィールド: |
$count |
19c | なし。 |
$currentOp |
なし | なし。 |
$documents |
23ai | なし。 |
$external |
23ai | 「$external集計パイプライン・ステージ」を参照してください。 |
$facet |
23ai | なし。 |
$geoNear |
なし | なし。 |
$graphLookup |
なし | なし。 |
$group |
23ai | なし。 |
$indexStats |
なし | なし。 |
$limit |
19c | なし。 |
$listLocalSessions |
なし | なし。 |
$listSessions |
なし | なし。 |
$lookup |
あり | 「$lookup集計パイプライン・ステージ」を参照してください。 |
$match |
19c | なし。 |
$merge |
なし | なし。 |
$out |
23ai | なし。 |
$planCacheStats |
なし | なし。 |
$project |
19c | なし。 |
$redact |
なし | なし。 |
$replaceRoot |
23ai | 別名: $replaceWith。
|
$replaceWith |
23ai | $replaceRootの別名。
|
$sample |
23ai | なし。 |
$setWindowFields |
なし | なし。 |
$set |
23ai | $addFieldsの別名。
|
$skip |
19c | なし。 |
$sort |
23ai | なし。 |
$sortByCount |
23ai | なし。 |
$sql |
19c | 「$sql集計パイプライン・ステージ」を参照してください。 |
$unionWith |
23ai | なし。 |
$unset |
19c | なし。 |
$unwind |
23ai | なし。 |
- $sql集計パイプライン・ステージ
$sqlステージを使用すると、Oracle SQLおよびPL/SQLコードを実行できます。 - $external集計パイプライン・ステージ
$externalステージを使用すると、外部ファイルからのデータにアクセスできます。 - $lookup集計パイプライン・ステージ
ステージ$lookupの使用に関する制限事項を説明します。
3.5.1 $sql集計パイプライン・ステージ
$sqlステージを使用してOracle SQLおよびPL/SQLコードを実行できます。
ここでは、シェルmongoshを使用してユーザーuser100としてMongoDBクライアントから単純な$sqlステージがある集計パイプラインを実行する例を示します。
insertManyを、empsというコレクションを作成しそれに3つの従業員ドキュメントを挿入するために使用します。脚注1
user100> db.emps.insertMany([
{"ename" : "SMITH", "job" : "CLERK", "sal" : 800},
{"ename" : "ALLEN", "job" : "SALESMAN", "sal" : 1600},
{"ename" : "WARD", "job" : "SALESMAN", "sal" : 1250}
]);mongoshによって示される結果:
{
acknowledged: true,
insertedIds: {
'0': ObjectId("6595eb06e0fc41db6de93a6d"),
'1': ObjectId("6595eb06e0fc41db6de93a6e"),
'2': ObjectId("6595eb06e0fc41db6de93a6f")
}
}SQLのSELECT問合せを、各ジョブの従業員給与の平均を計算するために使用します。この平均は、SQL関数AVGを使用して計算します。
user100> db.aggregate([ {$sql :
`SELECT e.data.job, AVG(e.data.sal) average
FROM emps e
GROUP BY e.data.job`
} ]);この問合せでは、フィールドJOBおよびAVERAGEがある2つのJSONオブジェクトが返されます。
[
{ JOB: 'CLERK', AVERAGE: 800 },
{ JOB: 'SALESMAN', AVERAGE: 1425 }
]
$sqlステージの構文は、次のとおりです。$sql以外のフィールドについては、表3-25を参照してください。
{$sql : {statement : <SQL statement>,
binds : <variables>,
dialect : <dialect>,
format : <format>}}
省略形式の構文{$sql : <SQL statement>}は、この構文{$sql : {statement : <SQL statement>}}と同等です。
<SQL statement>は、実行するOracle SQL文です。
-
$sqlがパイプライン内の唯一のステージであり、パイプラインに開始コレクションがない場合は、<SQL statement>を、任意のOracle SQLまたはPL/SQLコードにできます(SQLデータ定義言語(DDL)およびデータ操作言語(DML)コードを含む)。たとえば、このコードでは、SQLの
UPDATE文を使用してすべての従業員の給与を10%増やしています:db.aggregate([ {$sql : {statement : "UPDATE employees SET salary = salary * 0.1"}} ]); -
それ以外の場合は、パイプラインがコレクションに対して実行されるか、パイプラインに複数のステージがあります。この場合の説明:
-
<SQL statement>は、単一のJSON型列を投影するSELECT文である必要があります。 -
この
SELECT文では、入力ドキュメントを含む単一のJSON型列DATAがあるINPUTという名前のデータベース・ビュー(行ソース)を使用して、入力コレクションまたは前のステージからの出力を参照できます。『Oracle Database JSON開発者ガイド』のJSONデータの問合せも参照してください。
たとえば、次のコードは、開始コレクション
ordersに作用します。それには次の3つのステージがあります:-
ステージ
$matchでは、コレクションordersをフィルタし、値がclosedのstatusフィールドがあるドキュメントのみを選択しています。 -
ステージ
$sqlでは、ステージ$matchから出力されたフィルタされたドキュメントを入力として受け取っています。それらをビューinput(別名v)の列dataから取得しています。ドキュメントを選択する間に、Oracle SQL関数JSON_MERGEPATCHを使用して、新しいフィールドupdatedの値としてそれらにシステム・タイムスタンプを追加しています。結果となるタイムスタンプ付きドキュメントが、ステージ$sqlからの出力として返されます。 -
ステージ
$outでは、ステージ$sqlの出力、つまりSQLのSELECT文の結果として返されたドキュメントを使用して、新しいコレクションclosed_ordersを作成しています。
db.orders.aggregate([ {$match : {status : "closed"}}, {$sql : `SELECT json_mergepatch( v.data, JSON {'updated' : SYSTIMESTAMP}) FROM input v`}, {$out : "closed_orders"} ]);この問合せでは、新しいコレクション
closed_ordersからドキュメントが返されます。db.closed_orders.findOne(){ _id: ObjectId('65e8b973ca4d0a3a255794c8'), order_id: 12382, product: 'Autonomous Database', status: 'closed', updated: ISODate('2024-03-06T18:44:23.275Z') } -
次のSQL文は、ステージ$sqlではサポートされていません:
-
OUTパラメータまたはストアド・プロシージャの呼出しを直接使用する文(サブプログラム・パラメータ・モードおよびストアドPL/SQLユニットのSQL文を参照) -
RETURNING句およびRETURN変数を使用するデータ操作言語(DML)文(DML RETURNINGを参照)
すべてのステージで、その結果としてゼロ個以上のJSONオブジェクトが返されます。$sqlステージの結果は、実行されたSQL文がSELECT文であるかどうかで異なります。
-
SELECT文である場合、問合せ結果セット内の各行が、$sqlステージの結果内のJSONオブジェクトにマップされます。「SELECT文の場合の$sqlステージ結果」を参照してください。 -
SELECT以外の文である場合、$sqlステージ結果は、単一フィールドresultがあるJSONオブジェクトであり、その値では、その文で変更された表行数が示されています。「SELECT以外の文の場合の$sqlステージ結果」を参照してください。
表3-25 $sqlのフィールド
| フィールド | 型 | 説明 | 必須かどうか? |
|---|---|---|---|
statement |
string |
実行するSQL文。 |
はい。 |
binds |
任意の型 |
SQL変数バインディング。それぞれが、1つの変数とその値です。「bindsフィールド」を参照してください。 |
いいえ。 |
dialect |
string |
SQL文( |
いいえ。 |
format |
string |
ステージ |
いいえ。 |
resetSession |
boolean |
|
いいえ。デフォルトはfalseです。
|
bindsフィールド
$sqlステージでのオプションのbindsフィールドでは、SQL変数バインディング(プレースホルダ式)のセットを1つ以上指定します。各バインディングで、SQL文で使用されている1つの変数と、それと置き換える値を指定します。複数のバインディング・セットが指定されている場合、その文はセットごとに1回実行されます。
単一のバインディング・セットを指定するには、次の3つの方法があります:
-
バインディングのセットをオブジェクトとして指定します。その各メンバーに、フィールド名として1つの変数の名前があり、フィールド値としてその変数の値があります。
たとえば、ここでは変数
empnoが値"E123"にバインドされており、変数enameが値"Abdul J."にバインドされています。db.aggregate([ {$sql : {statement : `INSERT INTO emp(empno, ename) VALUES(:empno, :ename)`, binds : {"empno" : "E123", "ename" : "Abdul J."}}} ]); -
バインディングのセットを配列として指定します。その各要素はオブジェクトであり、それにはフィールド
index、name、value、dataTypeのどれがあります。各オブジェクトはバインディングを表しています。たとえば、ここではバインド変数
:empnoには値"E123"が、変数:enameには値"Abdul J."があります。db.aggregate([ {$sql : {statement : `INSERT INTO emp(empno, ename) VALUES (:empno, :ename)`, binds : [ {name : empno, value : "E123"}, {name : "ename", value : "Abdul J."} ] }} ]); -
バインディングのセットを配列として指定します。その各要素はバインド変数の値です。各値は配列内のその位置に従ってバインドされます。最初の配列要素(ここでは、
"E123")は最初のバインド変数:empnoの値であり、2番目の要素は2番目の変数の値です。(配列の要素は、同じ型である必要はありません。)db.aggregate([ {$sql : {statement : `INSERT INTO emp(empno, ename) VALUES (:empno, :ename)`, binds : [ "E123", "Abdul J." ] }} ]);
複数のバインディング・セットを指定するには、値(それぞれで単一のバインディング・セットを示す)の配列1つを使用します。各配列要素で、前述のいずれかの方法を使用して1つのバインディング・セットを指定できます。(1)メンバーが変数名と値のペアであるオブジェクト、(2)オプション・フィールドindex、name、valueおよびdataTypeがあるオブジェクトの配列、(3)配列の位置がVALUES句での変数索引に対応している変数値の配列。
これを次の3つの例で示します。それらは意味上は同等です。各例のINSERT文は3回実行されます:
-
バインディングの最初のセットに対して1回: 変数
:empnoは"E123"として、変数:enameは"Abdul J."として -
バインディングの2番目のセットに対して1回: 変数
:empnoは"E456"として、変数:enameは"Elena H."として -
バインディングの3番目のセットに対して1回: 変数
:empnoは"E789"として、変数:enameは"Francis K."として
最初の例では、配列要素はオブジェクトであり、それぞれで1つのバインディング・セットを指定しています。オブジェクトの各要素で、個々の(位置的)バインディングの値を指定しています。
db.aggregate([ {$sql :
{statement :
`INSERT INTO emp(empno, ename)
VALUES (:empno, :ename)`,
binds :
[ {"empno" : "E123", "ename" : "Abdul J."},
{"empno" : "E456", "ename" : "Elena H."},
{"empno" : "E789", "ename" : "Francis K."} ]}} ]);
2番目の例では、配列要素はそれら自体が配列であり、それぞれで変数バインディングの1セットを指定しています。ただし、この場合、内部配列の各要素は、フィールドnameとvalueがあるオブジェクトであり、個々の(位置的)バインディングの値を指定しています。
db.aggregate([ {$sql :
{statement :
`INSERT INTO emp(empno, ename)
VALUES (:empno, :ename)`,
binds : [ [ {name : empno,
value : "E123"},
{name : ename,
value : "Abdul J."} ],
[ {name : empno,
value : "E456"},
{name : ename,
value : "Elena H."} ],
[ {name : empno,
value : "E789"},
{name : ename,
value : "Francis K."} ] ]}} ]);
3番目の例では、配列要素はそれら自体が配列であり、それぞれで変数バインディングの1セットを指定しています。内部配列の各要素で、個々の(位置的)バインディングの値を指定しています。
db.aggregate([ {$sql :
{statement :
`INSERT INTO emp(empno, ename)
VALUES (:empno, :ename)`,
binds : [ [ "E123", "Abdul J." ],
[ "E456", "Elena H." ],
[ "E789", "Francis K." ] ]}} ]);
例3-5も参照してください。
表3-26 bindsオブジェクトのフィールド
| フィールド | JSON (BSON)型 | 説明 | 必須かどうか? |
|---|---|---|---|
index |
number |
SQL文内の指定された変数バインディングの索引(1起点の位置)。 |
いいえ。ない場合は、配列内のその値の位置から推測されます。 フィールド |
name |
string |
バインド変数の名前。 |
いいえ。 フィールド |
value |
任意の型 |
バインド変数の値。 |
いいえ。ない場合は、そのオブジェクト自体がバインド値になります。 次に例を示します
これは、次と同じです
|
dataType |
string |
指定された変数バインディングに使用するSQLデータ型。 |
いいえ。ない場合は、指定されたBSON値のデフォルト型が使用されます。「フィールドdataTypeでサポートされているSQLデータ型」を参照してください。 |
フィールドdataTypeでサポートされているSQLデータ型
フィールドdataTypeに指定できる値について説明します。
リストされていないBSON型はサポートされていません。それらを使用するとエラーが発生します。
Oracle Database 23ai以降では、サポートされている各BSON型でJSON型がサポートされています。リリース23aiより前は、フィールドdataTypeの値がJSONの場合はエラーが発生します。
表3-27 フィールドdatatypeの値
| 入力BSON型 | サポートされているSQL型 | デフォルトのSQL型 |
|---|---|---|
| String | JSON、VARCHAR2 |
VARCHAR2 |
| Double | JSON、BINARY_DOUBLE |
BINARY_DOUBLE |
| Decimal128、Int32またはInt64 | JSON、NUMBER |
NUMBER |
| Boolean | JSON、VARCHAR2、BOOLEAN |
Oracle Database 23ai: Oracle Database 19c: エラー — デフォルト・タイプなし |
| ObjectIdまたはBinary | JSON、RAW |
RAW |
| DateTime | JSON、TIMESTAMP WITH TIME ZONE |
TIMESTAMP WITH TIME ZONE |
| オブジェクト | JSON、VARCHAR2 |
Oracle Database 23ai: Oracle Database 19c: エラー(デフォルト・タイプなし) |
| Array | JSON、VARCHAR2 |
Oracle Database 23ai: Oracle Database 19c: エラー(デフォルト・タイプなし) |
| Null |
前述のすべてのSQL型。
|
VARCHAR2 |
SELECT文の場合の$sqlステージ結果
SELECT文である場合、問合せ結果セット内の各行が、$sqlステージの結果内のJSONオブジェクトにマップされます。(MongoDBシェル出力では、オブジェクトがカッコ([、])で囲まれます。結果はJSON配列ではありません。)
その問合せでは、JSONデータの単一列を返すことも、複数の列(各列はどの型でもかまわない)からのデータを返すこともできます。
-
前者の場合、
$sqlステージ結果のJSONオブジェクトは、SQL問合せによって返されたJSONデータです。これを例3-1に示します。 -
後者の場合、結果内のJSONオブジェクトは複数の列値で構成されています。問合せ内の列別名は、オブジェクトのフィールド名として使用されます。これを例3-2に示します。
2番目のケース(複数の列を返す問合せ)では、問合せの結果が、新しいBSONドキュメントにマップされます。指定されたSQL列がJSONデータであることがわかっている場合(それがJSON型であるか、それにIS JSON制約があることでわかる)は、それがBSON (JSON)値として直接使用されます。そうでない場合、列値のSQLからBSONへの型マッピングは、表3-28のようになります。他の型の列から値を選択すると、エラーが発生します。
表3-28 SELECT: JSON以外のSQL列からBSONへのマッピング
| SQL列型 | BSON (JSONスカラー)型 |
|---|---|
BINARY_DOUBLE、BINARY_FLOAT |
double |
BLOB |
raw |
RAW |
binary |
CLOB、VARCHAR2 |
string |
DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE |
date (UTCは、 |
NUMBER |
スケールがゼロの場合、精度に応じてint32またはint64になります。それ以外の場合は、doubleになります。 |
例3-1 JSONデータの単一列を返すSELECT問合せの結果
この例では、表deptから列を選択しJSONデータの単一列を返す、2つの問合せを示します。どちらも、SQL構造JSON{...}を使用してJSON型オブジェクトを生成します。
この最初の問合せでは、表deptからすべての列を選択するためにワイルドカード(*)を使用しています。列名が、結果となるオブジェクトのフィールド名として使用されています。
問合せ:
SELECT JSON{*} data FROM deptFoot 2
結果:
[ {DEPTNO : 10, DNAME : 'ACCOUNTING', LOC : 'NEW YORK'},
{DEPTNO : 20, DNAME : 'RESEARCH', LOC : 'DALLAS'},
{DEPTNO : 30, DNAME : 'SALES', LOC : 'CHICAGO'},
{DEPTNO : 40, DNAME : 'OPERATIONS', LOC : 'BOSTON'} ]
この2番目の問合せでは、表deptから列deptnoとdnameを選択しています。JSON{...}を使用して、それぞれフィールド_idとnameの値として列名が使用されている、JSON型オブジェクトを生成します。
問合せ:
SELECT JSON{'_id' : deptno, 'name', dname} data FROM deptFoot 3
結果:
[ {_id : 10, name : 'ACCOUNTING'},
{_id : 20, name : 'RESEARCH'},
{_id : 30, name : 'SALES'},
{_id : 40, name : 'OPERATIONS'} ]
表3-2 複数の列(任意の型)からデータを返すSELECT問合せの結果
この例では、表deptから列を選択しJSONオブジェクトを作成する、2つの問合せを示します。(これらの問合せでは、構造JSON{...}は使用しません。)
この最初の問合せでは、列deptno、dnameおよびlocを選択しています。結果となるオブジェクトのフィールド名は、選択した列の別名であり、フィールド値は、対応する列値です。
問合せ:
SELECT deptno, dname, loc FROM dept
結果:
[ {DEPTNO : 10, DNAME : 'ACCOUNTING', LOC : 'NEW YORK'},
{DEPTNO : 20, DNAME : 'RESEARCH', LOC : 'DALLAS'},
{DEPTNO : 30, DNAME : 'SALES', LOC : 'CHICAGO'},
{DEPTNO : 40, DNAME : 'OPERATIONS', LOC : 'BOSTON' } ]
この2番目の問合せでは、列deptnoとlocを選択し、SQL関数SYSTIMESTAMPを使用してタイムスタンプを生成しています。この問合せでは、列の別名を使用するかわりに、結果となるオブジェクトに対してフィールド名id、locationおよびtsを提供しています。mongoshでは、ISOタイムスタンプ値がISODateヘルパーでラップされます。
問合せ:
SELECT deptno "id", loc "location", SYSTIMESTAMP "ts" FROM dept
結果:
[ {id : 10,
location : 'NEW YORK',
ts : ISODate("2023-12-01T20:44:17.118Z")},
{id : 20,
location : 'DALLAS',
ts : ISODate("2023-12-01T20:44:17.118Z")},
{id : 30,
location : 'CHICAGO',
ts : ISODate("2023-12-01T20:44:17.118Z")},
{id : 40,
location : 'BOSTON',
ts : ISODate("2023-12-01T20:44:17.118Z")} ]
SELECT以外の文の場合の$sqlステージ結果
statementがSELECT文ではない$sqlステージの結果は、単一フィールドresultがあるJSONオブジェクトであり、その値では、その文によって変更(つまり、挿入、削除または更新)されたデータの行数が示されています。このようなステージでバインド変数の複数のセットを使用している場合、結果は、そのような数値(変更された行の数)の配列になります。
例3-3 DDL文(行は変更されない)の結果
このCREATE TABLE文などのDDL文では、行は変更されません。
db.aggregate([{$sql:`CREATE TABLE employee (name VARCHAR2(4000), job
VARCHAR2(4000))`}])
[ {result : 0} ]
例3-4 1行を変更するDML文の結果
この$sqlステージでのINSERT文では1行が挿入されるため、resultは1です。
db.aggregate([ {$sql : "INSERT INTO employee VALUES ('Bob', 'Programmer')"} ]);
[ {result : 1} ]
例3-5 3行を変更するDML文の結果
この$sqlステージでのINSERT文では、バインド変数の3つのセットのそれぞれに1つで、3行が挿入されます。
db.aggregate([ {$sql :
{statement : "INSERT INTO employee VALUES (:name, :job)",
binds : [ {"name" : "John", "job" : "Programmer"},
{"name" : "Jane", "job" : "Manager"},
{"name" : "Francis", "job" : "CEO"} ]}}]);
[ {result : [ 1, 1, 1 ]} ]
例3-6 2行を変更するDML文の結果
このDELETE文では2行が削除されるため、resultは2です。
db.aggregate([ {$sql : `DELETE FROM employee e WHERE e.job = 'Programmer'`} ])
[ {result : 2} ]
親トピック: 集計パイプライン・ステージ
3.5.2 $external集計パイプライン・ステージ
$externalステージを使用すると、外部ファイルからのデータにアクセスできます。
外部ファイルに格納されているJSONデータの使用では、たとえば、次のことができます:
-
ステージ
$matchを使用して、ファイル内のドキュメントをフィルタします。例3-10を参照してください。 -
ステージ
$groupを使用して、ファイル内のドキュメントをグループ化します。 -
ステージ
$outを使用して、新しいJSONコレクションにステージ$externalの出力を格納します。例3-10を参照してください。
$externalステージの構文は、次のとおりです。これらのフィールドについては、表3-29で説明します。
{$external : {location : <URL or file name>,
directory : <database directory name>,
credential : <credential name
path : <SQL/JSON path expression>}}
省略形式の構文{$external : <事前認証済URI>}は、構文{$external : {location : <事前認証済URI>}}と同等です。
表3-29 $externalのフィールド
| フィールド | 型 | 説明 | 必須かどうか? |
|---|---|---|---|
location |
string |
使用する外部JSONファイルの場所。脚注4 この文字列テキストは、 |
あり |
directory |
string |
フィールド |
いいえ(フィールド |
credential |
string |
オブジェクトストアのプライベート・バケット内のファイルにアクセスするときに使用する資格証明オブジェクト。(フィールド 資格証明オブジェクトは、PL/SQLサブプログラム |
なし |
path |
string |
そのJSONファイルから別のドキュメントとして抽出するJSONオブジェクトがターゲットとなる、SQL/JSONパス式。デフォルト値は 典型的な一例は、オブジェクトの単一JSON配列が含まれているファイルです。別の例は、最上位レベルに複数のオブジェクトがあるファイルです。 |
なし |
脚注4 インターネットを使用した外部ファイルへのアクセスには、PL/SQLパッケージDBMS_CLOUDが必要です。これはOracle Autonomous Database用に事前インストールされていますが、非自律型データベース用にインストールし構成する必要があります。
認証が必要ないURIの場合は、credentialを指定する必要がありません。pathを指定する必要もない場合は、locationのURLのみをフィールド$externalの値として使用できます。例3-10を参照してください。パブリック・リポジトリ、パブリック・バケット内のファイル、または事前認証済URIの場合、認証は必要ありません。
フィールドlocationとdirectoryが両方存在する場合は、それらの値が両方とも有効であれば、directoryフィールドが無視されます。それ以外の場合は、エラーが発生します。
例3-7 資格証明の作成
このステージ$sqlの使用では、PL/SQLサブプログラムDBMS_CLOUD.create_credentialを使用してユーザーmyuser@example.comの資格証明MYCREDを作成しています。PL/SQLパッケージDBMS_CLOUDはOracle Autonomous Database用に事前インストールされていますが、非自律型データベース用にインストールし構成する必要があります。
db.aggregate([ {$sql :
`BEGIN
DBMS_CLOUD.create_credential(
credential_name => 'MYCRED',
username => 'myuser@example.com',
password => 'XXXXXXXXX');
END;`} ])
例3-8 プライベート・バケットからのJSONドキュメントの抽出
この例では、資格証明MYCREDを使用して、プライベート・オブジェクトストア・バケットarray.jsonにある配列の要素をドキュメントの行として抽出します。このpathの$[*]は、各配列要素に一致します。
これがarray.jsonの内容であるとします:
[ {"_id" : {"$oid" : "663bce1c219cb9c411e8a719"},
"a" : {"b" : [ {"z" : {"b" : 1, "c" : 99}},
{"z" : {"b" : 2}},
{"z" : {"a" : 5}},
{"z" : {"b" : 1, "a" : 5}} ]}},
{"_id" : {"$oid" : "663bce1c219cb9c411e8a71a"},
"a" : {"b" : [ {"z" : {"b" : 1, "c" : 99}},
{"z" : {"b" : 2}},
{"z" : {"a" : 5}} ]}} ]
db.aggregate([ {$external :
{location :
"https://private-repo.example.com/.../array.json",
credential : "MYCRED",
path : "$[*]"}} ])
このステージでは、この配列から要素(2つのオブジェクト)が返されます:
[ {_id : ObjectId("663bce1c219cb9c411e8a719"),
a : {b : [ {z : {b : 1, c : 99}},
{z : {b : 2}},
{z : {a : 5}},
{z : {b : 1, a : 5}} ]}}
{_id : ObjectId("663bce1c219cb9c411e8a71a"),
a : {b : [ {z : {b : 1, c : 99}}, {z : {b : 2}}, {z : {a : 5}} ]}} ]
例3-9 ディレクトリ内の外部ファイルからのJSONドキュメントの抽出
この例では、パス式を使用して、外部ファイルarray.json (例3-8で定義されている)からフィールドzの値であるオブジェクトのみを抽出します。この例では、ディレクトリ・オブジェクトDEMOにファイルarray.jsonが存在することを前提としています。
db.aggregate([ {$external :
{location : "array.json",
directory : "DEMO",
path : `$.a.b[*].z`}}])
このステージでは、この配列からこれらのオブジェクトが返されます:
[ {b : 1, c : 99},
{b : 2},
{a : 5},
{b : 1, a : 5},
{b : 1, c : 99},
{b : 2},
{a : 5} ]
例3-10 選択したドキュメントからの新規コレクションの作成
この例では、パブリック・リポジトリからstatusがclosedの発注を抽出し、ステージ$outを使用してそれらのためのコレクションclosed-ordersを作成します。
pathは必要なく、リポジトリはパブリックであるため(したがって、credentialは必要ない)、フィールド$externalの値には省略形(リポジトリの場所のみ)を使用できます。(この省略形は事前認証済URIとともに使用できます。)
db.aggregate([ {$external :
"https://public-repo.example.com/.../orders.json"},
{$match : {status : "closed"},
{$out : "closed-orders"} ])
親トピック: 集計パイプライン・ステージ
3.5.3 $lookup集計パイプライン・ステージ
ステージ$lookupの使用に関する制限事項を説明します。
$lookupステージを使用すると、指定したフィールドで別のコレクションからのドキュメントを結合できます。ステージ$lookupのフィールドには、次の制限事項が適用されます:
-
フィールド
letはサポートされていません。使用すると、エラーが発生します。 -
フィールド
localFieldの値が、入力ドキュメントから欠落しているフィールドである場合は、エラーが発生します。(欠落しているフィールドは、それにnull値がある場合と同様に、処理されません。) -
フィールド
localFieldの値が配列である場合や、1つの入力ドキュメント内で複数回出現するフィールドである(したがって、複数の値を生成する)場合は、エラーが発生します。 -
フィールド
foreignFieldの値が、入力ドキュメントから欠落しているフィールドである場合、一致するドキュメントはありません(エラーは発生しない)。これには、フィールドlocalFieldで指定されているドキュメント・フィールドが欠落しているかそれにnull値がある場合が含まれます。 -
フィールド
pipelineには、$lookup、$projectおよび$sortステージのみを含めることができます。それ以外の場合は、エラーが発生します。フィールド$lookupおよび$projectにより、フィールドforeignFieldで参照されているフィールドを変更しないでください。そうしないと、エラーが発生します。
関連項目:
MongoDBリファレンス・マニュアルの$lookup (集計)。
親トピック: 集計パイプライン・ステージ
3.6 集計パイプライン演算子
MongoDB集計パイプライン演算子のサポートについて説明しています。
関連項目:
MongoDBリファレンス・マニュアルの集計パイプライン演算子
表3-30 算術式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$abs |
23ai | なし。 |
$add |
23ai | なし。 |
$ceil |
23ai | なし。 |
$divide |
23ai | なし。 |
$exp |
23ai | なし。 |
$floor |
23ai | なし。 |
$ln |
23ai | なし。 |
$log |
23ai | なし。 |
$log10 |
23ai | なし。 |
$mod |
23ai | なし。 |
$multiply |
23ai | なし。 |
$pow |
23ai | なし。 |
$round |
23ai | なし。 |
$sqrt |
23ai | なし。 |
$subtract |
23ai | なし。 |
$trunc |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの算術式演算子
表3-31 三角法式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$sin |
23ai | なし。 |
$cos |
23ai | なし。 |
$tan |
23ai | なし。 |
$asin |
23ai | なし。 |
$acos |
23ai | なし。 |
$atan |
23ai | なし。 |
$atan2 |
23ai | なし。 |
$sinh |
23ai | なし。 |
$tanh |
23ai | なし。 |
$degreesToRadians |
23ai | なし。 |
$radiansToDegrees |
23ai | なし。 |
表3-32 配列式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$arrayElemAt |
23ai | なし。 |
$arrayToObject |
23ai | なし。 |
$concatArrays |
23ai | なし。 |
$filter |
23ai | なし。 |
$first |
23ai | なし。 |
$firstN |
23ai | なし。 |
$in |
23ai | なし。 |
$indexOfArray |
23ai | なし。 |
$isArray |
23ai | なし。 |
$last |
23ai | なし。 |
$lastN |
23ai | なし。 |
$objectToArray |
23ai | なし。 |
$range |
23ai | なし。 |
$reduce |
23ai | なし。 |
$reverseArray |
23ai | なし。 |
$size |
23ai | なし。 |
$slice |
23ai | なし。 |
$sortArray |
23ai | なし。 |
$zip |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの配列式演算子
表3-33 ブール式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$and |
23ai | なし。 |
$not |
23ai | なし。 |
$or |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのブール式演算子
表3-34 比較式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$cmp |
23ai | なし。 |
$eq |
23ai | なし。 |
$gt |
23ai | なし。 |
$gte |
23ai | なし。 |
$lt |
23ai | なし。 |
$lte |
23ai | なし。 |
$ne |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの比較式演算子
表3-35 条件式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$cond |
23ai | なし。 |
$ifNull |
23ai | なし。 |
$switch |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの条件式演算子
表3-36 日付式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$dateAdd |
なし | なし。 |
$dateDiff |
なし | なし。 |
$dateFromParts |
23ai | なし。 |
$dateFromString |
23ai | なし。 |
$dateSubtract |
なし | なし。 |
$dateToParts |
23ai | なし。 |
$dateToString |
23ai | なし。 |
$dateTrunc |
なし | なし。 |
$dayOfMonth |
23ai | なし。 |
$dayOfWeek |
23ai | なし。 |
$dayOfYear |
23ai | なし。 |
$hour |
23ai | なし。 |
$isoDayOfWeek |
23ai | なし。 |
$isoWeek |
なし | なし。 |
$isoWeekYear |
23ai | なし。 |
$millisecond |
23ai | なし。 |
$minute |
23ai | なし。 |
$month |
23ai | なし。 |
$second |
23ai | なし。 |
$week |
23ai | なし。 |
$year |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの日付式演算子
表3-37 リテラル式演算子($literal)
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$literal |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのリテラル式演算子
表3-38 オブジェクト式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$mergeObjects |
23ai | なし。 |
$objectToArray |
23ai | なし。 |
$setField |
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのオブジェクト式演算子
表3-39 設定式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$anyElementFalse |
なし | なし。 |
$anyElementTrue |
なし | なし。 |
$setDifference |
なし | なし。 |
$setEquals |
なし | なし。 |
$setIntersection |
23ai | なし。 |
$setIsSubset |
なし | なし。 |
$setUnion |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの設定式演算子
表3-40 文字列式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$concat |
23ai | なし。 |
$indexOfBytes |
なし | なし。 |
$indexOfCP |
23ai | なし。 |
$ltrim |
23ai | なし。 |
$regexFind |
なし | なし。 |
$regexFindAll |
なし | なし。 |
$regexMatch |
なし | なし。 |
$replaceAll |
なし | なし。 |
$replaceOne |
なし | なし。 |
$rtrim |
23ai | なし。 |
$split |
なし | なし。 |
$strcasecmp |
23ai | なし。 |
$strLenBytes |
なし | なし。 |
$strLenCP |
23ai | なし。 |
$substr |
23ai | なし。 |
$substrBytes |
なし | なし。 |
$substrCP |
なし | なし。 |
$toLower |
23ai | なし。 |
$toUpper |
23ai | なし。 |
$trim |
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの文字列式演算子
表3-41 テキスト式演算子($meta)
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$meta |
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのテキスト式演算子
表3-42 型式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$convert |
なし | なし。 |
$isNumber |
23ai | なし。 |
$toBool |
23ai | なし。 |
$toDate |
23ai | なし。 |
$toDecimal |
なし | なし。 |
$toDouble |
23ai | なし。 |
$toInt |
23ai | なし。 |
$toLong |
23ai | なし。 |
$toObjectId |
23ai | なし。 |
$toString |
23ai | なし。 |
$type |
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの型式演算子
表3-43 アキュムレータ式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$accumulator |
なし | なし。 |
$addToSet |
23ai | なし。 |
$avg |
23ai | なし。 |
$bottom |
23ai | なし。 |
$bottomN |
なし | なし。 |
$count |
23ai | なし。 |
$first |
23ai | なし。 |
$firstN |
なし | なし。 |
$last |
23ai | なし。 |
$lastN |
なし | なし。 |
$max |
23ai | なし。 |
$maxN |
なし | なし。 |
$min |
23ai | なし。 |
$push |
23ai | なし。 |
$stdDevPop |
23ai | なし。 |
$stdDevSamp |
23ai | なし。 |
$sum |
23ai | なし。 |
$top |
23ai | なし。 |
$topN |
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのアキュムレータ($group)およびアキュムレータ($project)
表3-44 変数式演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$let |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの変数式演算子
表3-45 システム変数
| 変数 | サポート(開始時期) | ノート |
|---|---|---|
$$CURRENT |
23ai | なし。 |
$$DESCEND |
なし | なし。 |
$$KEEP |
なし | なし。 |
$$PRUNE |
なし | なし。 |
$$REMOVE |
なし | なし。 |
$$ROOT |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの集計式の変数
表3-46 その他の演算子
| 演算子 | サポート(開始時期) | ノート |
|---|---|---|
$binarySize |
23ai | なし。 |
$getField |
なし | なし。 |
$rand |
23ai | なし。 |
$sampleRate |
なし | なし。 |
$map |
23ai | なし。 |
$serviceのヒント: アプリケーション接続サービス(コンシューマ・グループ)
式に$serviceヒントを追加することで、次のアプリケーション接続サービス(コンシューマ・グループ)を任意の集計パイプライン式で使用できます。デフォルトでは、サービスLOWが使用されます。LOW、MEDIUMおよびHIGHは通常、レポートおよびバッチ処理に使用されます。TPおよびTPURGENTは通常、トランザクション処理に使用されます。
-
LOW— レポートおよびバッチ処理のための優先度の低いサービス。操作は並列で実行されません。 MEDIUM— レポートおよびバッチ操作のための優先度が中程度のサービス。すべての操作は並列で実行され、キューイングの対象となります。-
HIGH— レポートおよびバッチ操作のための優先度が高いサービス。すべての操作は並列で実行され、キューイングの対象となります。 -
TP— トランザクション処理の一般的なサービス。操作は並列で実行されません。 -
TPURGENT— タイム・クリティカルなトランザクション処理用の最も優先度の高いサービス。手動での並列処理をサポートします。
たとえば、次のヒントは、演算子$countがサービスHIGHを使用することを指定しています。
db.foo.aggregate([ {"$count":"cnt"} ], {"hint":{"$service":"HIGH"}}});
ヒント$serviceは、PL/SQLプロシージャCS_SESSION.switch_serviceを使用して、コンシューマ・グループをデフォルトのLOWから切り替えます。このため、$serviceのユーザーに、パッケージCS_SESSIONに対する権限EXECUTEが付与されている必要があります。そうでない場合は、コンシューマ・グループがLOWのままになります。グループ・ステータスが変化していないことを示すエラーは発生しません。
たとえば、管理者として接続している間に、このコマンドを使用してユーザーmyuserに権限EXECUTEを付与できます。
db.aggregate([{$sql : `grant execute on cs_session to myuser`}]);
関連項目:
-
Oracle Autonomous Database Serverlessの使用の接続、アプリケーションまたはツール用にどのデータベース・サービスを選択する必要があるか?
-
Oracle Autonomous Database Serverlessの使用のCS_SESSIONパッケージ
3.7 データ型
MongoDBのデータ型のサポートについて説明します。
表3-47 データ型
| データ型と別名 | サポート(開始時期) | ノート |
|---|---|---|
32ビット整数(int)
|
19c | なし。 |
64ビット整数(long)
|
19c | なし。 |
配列(array)
|
19c | なし。 |
バイナリ・データ(binData)
|
19c | なし。 |
ブール(bool)
|
19c | なし。 |
日付(date)
|
19c | なし。 |
DBPointer (dbPointer)
|
なし | なし。 |
Decimal128 (decimal)
|
19c | なし。 |
Double (double)
|
19c | なし。 |
JavaScript (javascript)
|
なし | なし。 |
MaxKey (maxKey)
|
なし | なし。 |
MinKey (minKey)
|
なし | なし。 |
Null (null)
|
19c | なし。 |
オブジェクト(object)
|
19c | なし。 |
ObjectId (objectId)
|
19c | なし。 |
正規表現(regex)
|
なし | なし。 |
文字列(string)
|
19c | なし。 |
記号(symbol)
|
なし | なし。 |
タイムスタンプ(timestamp)
|
なし | なし。 |
未定義(undefined)
|
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの$type
3.8 索引および索引プロパティ
MongoDBの索引および索引プロパティのサポートについて説明します。
ノート:
テキスト索引を除くすべての索引、およびすべての索引オプションは、Oracle Database 19cでは無視されます。索引は、Oracle Database 23ai以降でサポートされています。
表3-48 索引
| 索引タイプ | サポート(開始時期) | ノート |
|---|---|---|
| 2d索引 | なし | なし。 |
| 2dsphere索引 | なし | コレクションのバッキング表でSQL CREATE INDEXを使用して、Oracle Database空間索引を作成できます。
|
| 複合複数キー索引 | なし | 下のノートを参照してください。 |
| ハッシュ索引 | なし | なし。 |
| 単一フィールド複数キー索引 | 23ai | 下のノートを参照してください。 |
| テキスト索引 | 19c | なし。 |
ノート:
コレクションのバッキング表でSQL CREATE INDEXを使用して、適切なOracle Database索引を作成できます。JSONデータの索引を参照してください。
フィールドに配列値を指定できない場合は、json_valueファンクション・ベースの索引を作成します。それ以外の場合は、マテリアライズド・ビューに対して索引を使用します。JSON_TABLEに対してマテリアライズド・ビューを使用するためのJSON問合せリライトを参照してください。
関連項目:
MongoDBリファレンス・マニュアルの索引タイプ
表3-49 索引オプション
| 索引オプション | サポート(開始時期) | ノート |
|---|---|---|
| background | No-op | MongoDBでは非推奨となっています。Oracle Databaseでは無視されます。 |
| collation | なし | なし。 |
| expireAfterSeconds | 23ai | なし。 |
| hidden | なし | なし。 |
| online | 23ai | Oracle Database固有です。指定できる値はtrue (デフォルト)またはfalseです。Trueは、索引作成中に表に対するDML操作を許可するということです。 |
| partialFilterExpression | なし | なし。 |
| sparse | 23ai | なし。 |
| storageEngine | なし | なし。 |
| unique | 23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの索引プロパティ
脚注の説明
脚注1: Oracle Databaseでは、このコレクションは、単一のJSON型列dataがある表empsです。脚注2: Oracle Database 19cでは、かわりにこの問合せを使用します:
SELECT json_object(*) data FROM dept;脚注3: Oracle Database 19cでは、かわりにこの問合せを使用します:
SELECT json_object('_id':deptno, 'name', dname) data FROM dept;