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 コメント問合せ演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
|
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの$comment
表3-14 比較問合せ演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの比較問合せ演算子
表3-15 要素問合せ演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
|
19c | なし。 |
|
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの要素問合せ演算子
表3-16 評価問合せ演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
|
なし | なし。 |
|
なし | なし。 |
|
23ai | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの評価問合せ演算子
表3-17 地理空間問合せ演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$box |
なし | なし。 |
$center |
なし | なし。 |
$centerSphere |
なし | なし。 |
$geoIntersects |
19c | なし。 |
$geometry |
なし | なし。 |
$geoWithin |
19c | なし。 |
$maxDistance |
なし | なし。 |
$near |
19c | なし。 |
$nearSphere |
19c | なし。 |
$polygon |
なし | なし。 |
$uniqueDocs |
なし | なし。 |
表3-18 論理問合せ演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの論理問合せ演算子
表3-19 投影演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
|
19c | なし。 |
|
なし | なし。 |
|
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの投影演算子
3.3 更新演算子
MongoDB更新演算子のサポートについて説明します。これには、配列演算子、ビット単位演算子、フィールド更新演算子および修飾子更新演算子が含まれます。
表3-20 配列更新演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
関連項目:
表3-21 ビット単位更新演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
|
19c | なし。 |
ノート:
MongoDBリファレンス・マニュアルのビット単位の更新
表3-22 フィールド更新演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのフィールドの更新
表3-23 修飾子更新演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
|
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの更新演算子
3.4 カーソル・メソッド
MongoDBのカーソル・メソッドのサポートについて説明します。
表3-24 カーソル・メソッド
メソッド | サポート(開始時期) | ノート |
---|---|---|
$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-25 ステージ
ステージ | サポート(開始時期) | ノート |
---|---|---|
$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-26を参照してください。
{$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-26 $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-27 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-28 フィールド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-29のようになります。他の型の列から値を選択すると、エラーが発生します。
表3-29 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-30で説明します。
{$external : {location : <URL or file name>,
directory : <database directory name>,
credential : <credential name
path : <SQL/JSON path expression>}}
省略形式の構文{$external : <事前認証済URI>}
は、構文{$external : {location : <事前認証済URI>}}
と同等です。
表3-30 $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-31 算術式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$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-32 三角法式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$sin |
23ai | なし。 |
$cos |
23ai | なし。 |
$tan |
23ai | なし。 |
$asin |
23ai | なし。 |
$acos |
23ai | なし。 |
$atan |
23ai | なし。 |
$atan2 |
23ai | なし。 |
$sinh |
23ai | なし。 |
$tanh |
23ai | なし。 |
$degreesToRadians |
23ai | なし。 |
$radiansToDegrees |
23ai | なし。 |
表3-33 配列式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$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-34 ブール式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$and |
23ai | なし。 |
$not |
23ai | なし。 |
$or |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのブール式演算子
表3-35 比較式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$cmp |
23ai | なし。 |
$eq |
23ai | なし。 |
$gt |
23ai | なし。 |
$gte |
23ai | なし。 |
$lt |
23ai | なし。 |
$lte |
23ai | なし。 |
$ne |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの比較式演算子
表3-36 条件式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$cond |
23ai | なし。 |
$ifNull |
23ai | なし。 |
$switch |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの条件式演算子
表3-37 日付式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$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-38 リテラル式演算子($literal)
演算子 | サポート(開始時期) | ノート |
---|---|---|
$literal |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのリテラル式演算子
表3-39 オブジェクト式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$mergeObjects |
23ai | なし。 |
$objectToArray |
23ai | なし。 |
$setField |
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのオブジェクト式演算子
表3-40 設定式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$anyElementFalse |
なし | なし。 |
$anyElementTrue |
なし | なし。 |
$setDifference |
なし | なし。 |
$setEquals |
なし | なし。 |
$setIntersection |
23ai | なし。 |
$setIsSubset |
なし | なし。 |
$setUnion |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの設定式演算子
表3-41 文字列式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$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-42 テキスト式演算子($meta)
演算子 | サポート(開始時期) | ノート |
---|---|---|
$meta |
なし | なし。 |
関連項目:
MongoDBリファレンス・マニュアルのテキスト式演算子
表3-43 型式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$convert |
なし | なし。 |
$isNumber |
23ai | なし。 |
$toBool |
23ai | なし。 |
$toDate |
23ai | なし。 |
$toDecimal |
なし | なし。 |
$toDouble |
23ai | なし。 |
$toInt |
23ai | なし。 |
$toLong |
23ai | なし。 |
$toObjectId |
23ai | なし。 |
$toString |
23ai | なし。 |
$type |
19c | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの型式演算子
表3-44 アキュムレータ式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$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-45 変数式演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$let |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの変数式演算子
表3-46 システム変数
変数 | サポート(開始時期) | ノート |
---|---|---|
$$CURRENT |
23ai | なし。 |
$$DESCEND |
なし | なし。 |
$$KEEP |
なし | なし。 |
$$PRUNE |
なし | なし。 |
$$REMOVE |
なし | なし。 |
$$ROOT |
23ai | なし。 |
関連項目:
MongoDBリファレンス・マニュアルの集計式の変数
表3-47 その他の演算子
演算子 | サポート(開始時期) | ノート |
---|---|---|
$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-48 データ型
データ型と別名 | サポート(開始時期) | ノート |
---|---|---|
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の索引および索引プロパティのサポートについて説明します。
表3-49 索引
索引タイプ | サポート(開始時期) | ノート |
---|---|---|
2d索引 | なし(23ai)。No-op (19c) | なし。 |
2dsphere索引 | なし(23ai)。No-op (19c) | コレクションのバッキング表でSQL CREATE INDEX を使用して、Oracle Database空間索引を作成できます。
|
複合複数キー索引 | なし(23ai)。No-op (19c) | 下のノートを参照してください。 |
ハッシュ索引 | なし(23ai)。No-op (19c) | なし。 |
単一フィールド複数キー索引 | 23ai.No-op (19c) | 下のノートを参照してください。 |
テキスト索引 | 19c | なし。 |
ノート:
コレクションのバッキング表でSQL CREATE INDEX
を使用して、適切なOracle Database索引を作成できます。JSONデータの索引を参照してください。
フィールドに配列値を指定できない場合は、json_value
ファンクション・ベースの索引を作成します。それ以外の場合は、マテリアライズド・ビューに対して索引を使用します。JSON_TABLEに対してマテリアライズド・ビューを使用するためのJSON問合せリライトを参照してください。
関連項目:
MongoDBリファレンス・マニュアルの索引タイプ
表3-50 索引プロパティ
索引プロパティ | サポート(開始時期) | ノート |
---|---|---|
バックグラウンド | なし(23ai)、No-op (19c) | なし。 |
大/小文字を区別しない | なし(23ai)、No-op (19c) | なし。 |
部分 | なし(23ai)、No-op (19c) | なし。 |
スパース | なし(23ai)、No-op (19c) | なし。 |
TTL | なし(23ai)、No-op (19c) | SQLを使用してMongoDB複合索引または単一フィールド索引と同等のものを作成する場合、索引にプロパティTTLを指定できます。 |
一意 | 23ai (19cではNo-op) | SQLを使用してMongoDB複合索引または単一フィールド索引と同等のものを作成する場合、索引は一意にすることができます。 |
関連項目:
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;