3 MongoDB API、操作およびデータ型のサポート — リファレンス

Oracle DatabaseでサポートされているMongoDB API、操作およびデータ型、ならびにそのサポートに関する情報を示します。

サポートされていないMongoDBコンストラクトではエラーが発生します。このドキュメントでは、無視されるコンストラクトをno-opとしてリストしています(エラーは発生しません)。Oracleアーキテクチャにおいて意味がないか不要であるコンストラクトは無視できます。

ノート:

サーバー・コマンドのみが対象であり、クライアント側のラッパー関数は対象外です。deleteMany()updateMany()などのクライアント側のラッパー関数では、サーバー・コマンドdelete()およびupdate()を内部的に使用します。

ノート:

Oracle Database API for MongoDBでは、MongoDBデータベースに大きなファイルを格納するための仕様である、GridFSがサポートされています。

3.1 データベース・コマンド

MongoDBデータベース・コマンドのサポートについて説明します。これには、管理、集計、認証、診断、問合せおよび書込み操作、ロール管理、レプリケーション、セッション、ユーザー管理およびシャーディングのためのコマンドが含まれます。

関連項目:

MongoDBリファレンス・マニュアルのデータベース・コマンド

表3-1 管理コマンド

コマンド サポート(開始時期) ノート
制限付きコレクション なし なし。
cloneCollectionAsCapped なし なし。
collMod なし なし。
collModexpireAfterSeconds なし なし。
convertToCapped なし なし。
create 19c

現在のOracle Databaseスキーマにコレクションを作成します。指定されたコレクションがすでに存在する場合、これはno-opです。

createView なし なし。
createIndexes 23ai.No-op (19c) なし。
currentOp なし なし。

drop

19c なし。
dropDatabase 19c

現在のOracle Databaseスキーマ内のすべてのコレクションを削除します。スキーマ自体は削除(ドロップ)しません

このコマンドは、ロールrootでログインしているユーザーのみが使用できます。

dropIndexes 23ai.No-op (19c) なし。
filemd5 なし なし。
getParameter 19c サポートされているパラメータ: authenticationMechanisms
killCursors 19c

サポートされているフィールド: cursors

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

サポートされているフィールド: query

distinct 19c

サポートされているフィールド: keyquery

keyで指定されたパスによってターゲット指定された個別のスカラー値を配列として返します。MongoDBとは異なり、パスによってターゲット指定された非スカラー値は含まれません。

mapReduce なし なし。

関連項目:

MongoDBリファレンス・マニュアルの集計コマンド

表3-3 認証コマンド

コマンド サポート(開始時期) ノート
logout 19c 特定のポートでOracle Databaseスキーマの現在のユーザーをログアウトさせます。

関連項目:

MongoDBリファレンス・マニュアルの認証コマンド

表3-4 診断コマンド

コマンド サポート(開始時期) ノート
buildInfo 19c

Oracle Database API for MongoDBの現在のビルドに関する情報を返します。

collStats 19c なし。
compact No-op 無視(エラーなし)。
connPoolStats なし なし。
connectionStatus 19c なし。
dataSize 23ai サポートされているフィールド: estimatekeyPatternminmax
dbHash なし なし。
dbStats 19c

サポートされているフィールド: scale

Oracle Databaseスキーマに関する統計(そのコレクションおよび関連する索引)をリストします。

explain 19c なし。
explainexecutionStats 19c なし。
features なし なし。
getLog No-op 無視(エラーなし)。
hostInfo 19c なし。
listCommands 19c なし。
ping 19c なし。
profiler なし なし。
serverStatus 19c なし。
top なし なし。
whatsmyuri 19c なし。

関連項目:

MongoDBリファレンス・マニュアルの診断コマンド

表3-5 問合せおよび書込み操作のコマンド

コマンド サポート(開始時期) ノート
変更ストリーム なし なし。
delete 19c
  • サポートされているフィールド: deletesordered

  • サポートされているdeletes配列演算子: qlimit

コマンドdeletefindfindAndModifyおよびupdateでサポートされる問合せ演算子を参照してください。

find 19c

コマンドfindのサポートを参照してください。

findAndModify 19c
  • サポートされているフィールド: arrayFiltersfieldsnewqueryremovesortupdateupsert

  • サポートされているフィールド更新演算子: $bit$currentDate$inc$min$max$mul$rename$set$setOnInsert$unset

  • サポートされている配列更新演算子: $$[]$[<identifier>]$addToOffset$pop $pull$pullAll$push

  • サポートされている配列更新演算子修飾子: $each$position$slice$sort

コマンドdeletefindfindAndModifyおよびupdateでサポートされる問合せ演算子を参照してください。

getLastError 19c なし。
getMore 19c

サポートされているフィールド: batchSizecollection

getPrevError なし なし。
GridFS 19c なし。
insert 19c

サポートされているフィールド: documents

parallelCollectionScan なし なし。
ReplaceOne なし なし。
resetError 19c なし。
update 19c
  • サポートされているフィールド: orderedupdates

  • 配列updatesの要素でサポートされているフィールド: arrayFiltersmultiquupsert

返されるレスポンスに含まれるフィールドnnModifiedupsertedおよびwriteErrors。配列upsertedには、ドキュメントの_id値のみが含まれ、索引は含まれていません。

ノート:

コマンドfindのサポート。

  • サポートされる演算子: コマンドdeletefindfindAndModifyおよびupdateでサポートされる問合せ演算子を参照してください。

  • サポートされているフィールド: batchSizefilterlimitprojectionreturnKeysingleBatchskipsort

    フィールド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"}})

ノート:

コマンドdeletefindfindAndModifyおよび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 配列問合せ演算子

演算子 サポート(開始時期) ノート

$all

19c なし。

$elemMatch

19c なし。

$size

19c なし。

関連項目:

MongoDBリファレンス・マニュアルの配列問合せ演算子

表3-12 ビット単位問合せ演算子

演算子 サポート(開始時期) ノート

$bitsAllSet

なし なし。

$bitsAnySet

なし なし。

$bitsAllClear

なし なし。

$bitsAnyClear

なし なし。

関連項目:

MongoDBリファレンス・マニュアルのビット単位問合せ演算子

表3-13 コメント問合せ演算子

演算子 サポート(開始時期) ノート

$comment

23ai なし。

関連項目:

MongoDBリファレンス・マニュアルの$comment

表3-14 比較問合せ演算子

演算子 サポート(開始時期) ノート

$eq

19c なし。

$gt

19c なし。

$gte

19c なし。

$lt

19c なし。

$lte

19c なし。

$ne

19c なし。

$in

19c なし。

$nin

19c なし。

関連項目:

MongoDBリファレンス・マニュアルの比較問合せ演算子

表3-15 要素問合せ演算子

演算子 サポート(開始時期) ノート

$exists

19c なし。

$type

19c なし。

関連項目:

MongoDBリファレンス・マニュアルの要素問合せ演算子

表3-16 評価問合せ演算子

演算子 サポート(開始時期) ノート

$expr

なし なし。

$jsonSchema

なし なし。

$mod

23ai なし。

$regex

19c なし。

$text

19c なし。

$where

なし なし。

関連項目:

MongoDBリファレンス・マニュアルの評価問合せ演算子

表3-17 地理空間問合せ演算子

演算子 サポート(開始時期) ノート
$box なし なし。
$center なし なし。
$centerSphere なし なし。
$geoIntersects 19c なし。
$geometry なし なし。
$geoWithin 19c なし。
$maxDistance なし なし。
$near 19c なし。
$nearSphere 19c なし。
$polygon なし なし。
$uniqueDocs なし なし。

表3-18 論理問合せ演算子

演算子 サポート(開始時期) ノート

$and

19c なし。

$nor

19c なし。

$not

19c なし。

$or

19c なし。

関連項目:

MongoDBリファレンス・マニュアルの論理問合せ演算子

表3-19 投影演算子

演算子 サポート(開始時期) ノート

$elemMatch

19c なし。

$meta

なし なし。

$slice

なし なし。

関連項目:

MongoDBリファレンス・マニュアルの投影演算子

3.3 更新演算子

MongoDB更新演算子のサポートについて説明します。これには、配列演算子、ビット単位演算子、フィールド更新演算子および修飾子更新演算子が含まれます。

表3-20 配列更新演算子

演算子 サポート(開始時期) ノート

$

19c なし。

$[]

19c なし。

$[<identifier>]

19c なし。

$addToSet

19c なし。

$pop

19c なし。

$pull

19c なし。

$pullAll

19c なし。

$push

19c なし。

関連項目:

配列の更新

表3-21 ビット単位更新演算子

演算子 サポート(開始時期) ノート

$bit

19c なし。

ノート:

MongoDBリファレンス・マニュアルのビット単位の更新

表3-22 フィールド更新演算子

演算子 サポート(開始時期) ノート

$currentDate

19c なし。

$inc

19c なし。

$max

19c なし。

$min

19c なし。

$mul

19c なし。

$rename

19c なし。

$set

19c なし。

$setOnInsert

19c なし。

$unset

19c なし。

関連項目:

MongoDBリファレンス・マニュアルのフィールドの更新

表3-23 修飾子更新演算子

演算子 サポート(開始時期) ノート

$each

19c なし。

$position

19c なし。

$slice

19c なし。

$sort

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索引に関する統計をリストします。

サポートされているフィールド: scale

$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 なし。

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をフィルタし、値がclosedstatusフィールドがあるドキュメントのみを選択しています。

    • ステージ$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ではサポートされていません:

すべてのステージで、その結果としてゼロ個以上の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文(statement)の方言。値は"oracle"である必要があります(それ以外の場合はエラーが発生します)。

いいえ。
format string

ステージ$sqlの出力ドキュメントの形式。値は"oracle"である必要があります(それ以外の場合はエラーが発生します)。

いいえ。
resetSession boolean
  • trueは、$sql文が実行されるデータベース・セッションが再利用されないことを意味します。したがって、セッション状態の変化は、その$sqlコマンドに続くコマンドには認識されません

    $sql文がトランザクションの一部である場合、そのトランザクションが終了するまでセッションはリセットされません。

  • falseは、$sqlコマンドの後に現在のセッションが再利用されることを意味します。セッションの状態は、後続のコマンドに認識される場合があります。

いいえ。デフォルトは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."}}} ]);
  • バインディングのセットを配列として指定します。その各要素はオブジェクトであり、それにはフィールドindexnamevaluedataTypeのどれがあります。各オブジェクトはバインディングを表しています。

    たとえば、ここではバインド変数: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)オプション・フィールドindexnamevalueおよび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セットを指定しています。ただし、この場合、内部配列の各要素は、フィールドnamevalueがあるオブジェクトであり、個々の(位置的)バインディングの値を指定しています。

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起点の位置)。

いいえ。ない場合は、配列内のその値の位置から推測されます。

フィールドindexnameは相互に排他的です。一方が存在する場合、もう一方は存在しないようにする必要があります(そうなっていない場合はエラーが発生します)。

name string

バインド変数の名前。

いいえ。

フィールドindexnameは相互に排他的です。一方が存在する場合、もう一方は存在しないようにする必要があります(そうなっていない場合はエラーが発生します)。

value 任意の型

バインド変数の値。

いいえ。ない場合は、そのオブジェクト自体がバインド値になります。

次に例を示します

{binds:[{"foo":123},...]}

これは、次と同じです

{binds:[{value:{"foo":123}},...]}

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 JSONVARCHAR2 VARCHAR2
Double JSONBINARY_DOUBLE BINARY_DOUBLE
Decimal128、Int32またはInt64 JSONNUMBER NUMBER
Boolean JSONVARCHAR2BOOLEAN

Oracle Database 23ai: BOOLEAN

Oracle Database 19c: エラー — デフォルト・タイプなし

ObjectIdまたはBinary JSONRAW RAW
DateTime JSONTIMESTAMP WITH TIME ZONE TIMESTAMP WITH TIME ZONE
オブジェクト JSONVARCHAR2

Oracle Database 23ai: JSON

Oracle Database 19c: エラー(デフォルト・タイプなし)

Array JSONVARCHAR2

Oracle Database 23ai: JSON

Oracle Database 19c: エラー(デフォルト・タイプなし)

Null

前述のすべてのSQL型。

JSON型の場合、BSON nullはJSON nullにマップされます。他のすべての型の場合、それはSQL NULLにマップされます。

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_DOUBLEBINARY_FLOAT double
BLOB raw
RAW binary
CLOBVARCHAR2 string
DATETIMESTAMPTIMESTAMP WITH TIME ZONE

date

(UTCは、DATEおよびTIMESTAMPとみなされます。)

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から列deptnodnameを選択しています。JSON{...}を使用して、それぞれフィールド_idnameの値として列名が使用されている、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{...}は使用しません。)

この最初の問合せでは、列deptnodnameおよび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番目の問合せでは、列deptnolocを選択し、SQL関数SYSTIMESTAMPを使用してタイムスタンプを生成しています。この問合せでは、列の別名を使用するかわりに、結果となるオブジェクトに対してフィールド名idlocationおよび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ステージ結果

statementSELECTではない$sqlステージの結果は、単一フィールドresultがあるJSONオブジェクトであり、その値では、その文によって変更(つまり、挿入、削除または更新)されたデータの行数が示されています。このようなステージでバインド変数の複数のセットを使用している場合、結果は、そのような数値(変更された行の数)の配列になります。

例3-3例3-4例3-5および例3-6では、SELECT以外の文の結果を示しています。

例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行が挿入されるため、result1です。

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行が削除されるため、result2です。

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

この文字列テキストは、"https://raw.somerepository.com/myuser/my-db-schemas/main/order_entry/PurchaseOrders.dmp"などのURL、またはフィールドdirectoryで指定されているデータベース・ディレクトリ・オブジェクト内のファイルの名前("mycomments.json"など)です。Oracle Databaseユーティリティデータファイルと出力ファイルの場所を参照してください。

あり

directory string

フィールドlocationで指定されているファイルを含むデータベース・ディレクトリ・オブジェクト。Oracle Databaseユーティリティデータファイルと出力ファイルの場所を参照してください。

いいえ(フィールドlocationの値がディレクトリ・オブジェクト内のファイルである場合を除く)。

credential string

オブジェクトストアのプライベート・バケット内のファイルにアクセスするときに使用する資格証明オブジェクト。(フィールドcredentialは、パブリック・バケット内のファイルの場合は指定する必要がありません。)

資格証明オブジェクトは、PL/SQLサブプログラムDBMS_CREDENTIAL.create_credentialまたはDBMS_CLOUD.create_credentialを使用して作成します。Oracle Databaseユーティリティオブジェクト・ストア用の資格証明の作成方法を参照してください。

なし

path string

そのJSONファイルから別のドキュメントとして抽出するJSONオブジェクトがターゲットとなる、SQL/JSONパス式。デフォルト値は"$[*]"です。

典型的な一例は、オブジェクトの単一JSON配列が含まれているファイルです。別の例は、最上位レベルに複数のオブジェクトがあるファイルです。

なし

脚注4 インターネットを使用した外部ファイルへのアクセスには、PL/SQLパッケージDBMS_CLOUDが必要です。これはOracle Autonomous Database用に事前インストールされていますが、非自律型データベース用にインストールし構成する必要があります。

認証が必要ないURIの場合は、credentialを指定する必要がありません。pathを指定する必要もない場合は、locationのURLのみをフィールド$externalの値として使用できます。例3-10を参照してください。パブリック・リポジトリ、パブリック・バケット内のファイル、または事前認証済URIの場合、認証は必要ありません。

フィールドlocationdirectoryが両方存在する場合は、それらの値が両方とも有効であれば、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が使用されます。LOWMEDIUMおよび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`}]);

関連項目:

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;