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

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

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

ノート:

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

ノート:

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

データベース・コマンド

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

関連項目:

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

表3-1 管理コマンド

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

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

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

drop

19c  
dropDatabase 19c

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

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

dropIndexes 26ai. No-op (19c)  
filemd5 なし このコマンドは、MongoDBでは非推奨となっています。MD5は暗号的に安全とはみなされなくなったため、このコマンドの使用はお薦めしません。
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 MongoDBバージョン6.0以降は非推奨になりました。
renameCollection なし 集計パイプライン・ステージ$sqlを使用してJSONコレクション・ビューを作成できます。
setParameter No-op 無視(エラーなし)。
validate 19c  
repairDatabase No-op 該当なし。

ノート:

コマンドcreateを明示的に使用してコレクションを作成する以外に、ドキュメントを初めて挿入すると、コレクションが自動的に作成されます。つまり、コレクションは、ドキュメントを挿入するときにその名前を参照することで作成できます。

関連項目:

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

表3-2 集計コマンド

コマンド サポート(開始時期) ノート
aggregate 26ai  
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 26ai サポートされているフィールド: estimatekeyPatternminmax
dbHash なし  
dbStats 19c

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

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

explain 19c  
explainexecutionStats 19c  
features なし  
getLog No-op 無視されます。該当なし。
hostInfo 19c  
listCommands 19c  
ping 19c  
profiler なし クエリー・プロファイリングにはSQL*Monitorを使用します。
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 なし ヒント$serviceの使用を検討してください。
resetError 19c  
update 19c
  • サポートされているフィールド: orderedupdates

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

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

ノート:

コマンドfindのサポート。

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

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

    フィールドreturnKeyは、見つかったドキュメントに関連付けられた主キー(ObjectIDなど)のみを返すことができます。問合せをサポートするために索引を使用している場合、このコマンドを使用して索引キーのみを返すことはできません。

  • $は、projection仕様では使用できません。単純なフィールド選択または省略のみを実行できます。

JSON値のソート:

  • Oracle AI Database 26ai以降: 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リファレンス・マニュアルのセッション・コマンド

Oracle Database API for MongoDBのセキュリティ・モデルでは、Oracle AI Databaseの組込みセキュリティ・モデルが活用されています。

表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リファレンス・マニュアルのシャーディング・コマンド

問合せ演算子および投影演算子

MongoDBの問合せ演算子および投影演算子のサポートについて説明します。これには、配列演算子、ビット単位演算子、コメント演算子、比較演算子、要素演算子、評価演算子、地理空間演算子および論理問合せ演算子に加え、投影演算子が含まれます。

関連項目:

MongoDBリファレンス・マニュアルの問合せ演算子および投影演算子

表3-11 配列問合せ演算子

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

$all

19c  

$elemMatch

19c  

$size

19c  

関連項目:

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

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

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

$bitsAllSet

なし  

$bitsAnySet

なし  

$bitsAllClear

なし  

$bitsAnyClear

なし  

関連項目:

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

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

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

$eq

19c  

$gt

19c  

$gte

19c  

$lt

19c  

$lte

19c  

$ne

19c  

$in

19c  

$nin

19c  

関連項目:

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

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

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

$exists

19c  

$type

19c  

関連項目:

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

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

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

$expr

なし  

$jsonSchema

なし  

$mod

26ai  

$regex

19c  

$text

19c  

$where

なし サーバー側のJavaScriptは非推奨となっています。MongoDBドキュメントを参照してください。

関連項目:

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

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

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

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

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

$and

19c  

$nor

19c  

$not

19c  

$or

19c  

関連項目:

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

表3-18 投影演算子

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

$elemMatch

19c  

$meta

なし  

$slice

なし  

関連項目:

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

更新演算子

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

表3-19 配列更新演算子

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

$

19c  

$[]

19c  

$[<identifier>]

19c  

$addToSet

19c  

$pop

19c  

$pull

19c  

$pullAll

19c  

$push

19c  

関連項目:

配列の更新

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

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

$bit

19c  

ノート:

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

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

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

$currentDate

19c  

$inc

19c  

$max

19c  

$min

19c  

$mul

19c  

$rename

19c  

$set

19c  

$setOnInsert

19c  

$unset

19c  

関連項目:

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

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

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

$each

19c  

$position

19c  

$slice

19c  

$sort

19c  

関連項目:

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

カーソル・メソッド

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リファレンス・マニュアルのカーソル・メソッド

集計パイプライン・ステージ

MongoDB集計パイプライン・ステージのサポートについて説明します。

関連項目:

MongoDBリファレンス・マニュアルの集計パイプライン・ステージ

表3-24 ステージ

ステージ サポート(開始時期) ノート
$addFields 26ai 別名: $set
$bucket 26ai  
$bucketAuto なし  
$collStats 19c

指定されたコレクションおよびそれに関連するOracle Database索引に関する統計をリストします。

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

$count 19c  
$currentOp なし  
$documents 26ai  
$external 26ai 「$external集計パイプライン・ステージ」を参照してください。
$facet 26ai  
$geoNear なし  
$graphLookup なし  
$group 26ai  
$indexStats 26ai  
$limit 19c  
$listLocalSessions なし  
$listSessions なし  
$lookup 26ai 「$lookup集計パイプライン・ステージ」を参照してください。
$match 19c  
$merge 26ai  
$out 26ai  
$planCacheStats なし  
$project 19c  
$redact なし  
$replaceRoot 26ai 別名: $replaceWith
$replaceWith 26ai $replaceRootの別名。
$sample 26ai  
$setWindowFields なし  
$set 26ai $addFieldsの別名。
$skip 19c  
$sort 26ai  
$sortByCount 26ai  
$sql 19c $sql集計パイプライン・ステージ」を参照してください。
$unionWith 26ai  
$unset 19c  
$unwind 26ai  

$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 AI 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-25 $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-26 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 AI Database 26ai以降では、サポートされている各BSON型でJSON型がサポートされています。リリース26aiより前は、フィールドdataTypeの値がJSONの場合はエラーが発生します。

表3-27 フィールドdatatypeの値

入力BSON型 サポートされているSQL型 デフォルトのSQL型
String JSONVARCHAR2 VARCHAR2
Double JSONBINARY_DOUBLE BINARY_DOUBLE
Decimal128、Int32またはInt64 JSONNUMBER NUMBER
Boolean JSONVARCHAR2BOOLEAN

Oracle AI Database 26ai: BOOLEAN

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

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

Oracle AI Database 26ai: JSON

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

Array JSONVARCHAR2

Oracle AI Database 26ai: 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-28のようになります。他の型の列から値を選択すると、エラーが発生します。

表3-28 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} ]

$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

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

あり

directory string

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

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

credential string

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

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

なし

path string

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

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

なし

脚注4 インターネットを使用した外部ファイルへのアクセスには、PL/SQLパッケージDBMS_CLOUDが必要です。これはOracle Autonomous AI 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 AI 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"} ])

$lookup集計パイプライン・ステージ

ステージ$lookupの使用に関する制限事項を説明します。

$lookupステージを使用すると、指定したフィールドで別のコレクションからのドキュメントを結合できます。ステージ$lookupのフィールドには、次の制限事項が適用されます:

  • フィールドletはサポートされていません。使用すると、エラーが発生します。

  • フィールドlocalFieldの値が、入力ドキュメントから欠落しているフィールドである場合は、エラーが発生します。(欠落しているフィールドは、それにnull値がある場合と同様に、処理されません。)

  • フィールドlocalFieldの値が配列である場合や、1つの入力ドキュメント内で複数回出現するフィールドである(したがって、複数の値を生成する)場合は、エラーが発生します。

  • フィールドforeignFieldの値が、入力ドキュメントから欠落しているフィールドである場合、一致するドキュメントはありません(エラーは発生しない)。これには、フィールドlocalFieldで指定されているドキュメント・フィールドが欠落しているかそれにnull値がある場合が含まれます。

  • フィールドpipelineには、$lookup$projectおよび$sortステージのみを含めることができます。それ以外の場合は、エラーが発生します。フィールド$lookupおよび$projectにより、フィールドforeignFieldで参照されているフィールドを変更しないでください。そうしないと、エラーが発生します。

関連項目:

MongoDBリファレンス・マニュアルの$lookup (集計)

集計パイプライン演算子

MongoDB集計パイプライン演算子のサポートについて説明しています。

関連項目:

MongoDBリファレンス・マニュアルの集計パイプライン演算子

表3-30 算術式演算子

演算子 サポート(開始時期) ノート
$abs 26ai  
$add 26ai  
$ceil 26ai  
$divide 26ai  
$exp 26ai  
$floor 26ai  
$ln 26ai  
$log 26ai  
$log10 26ai  
$mod 26ai  
$multiply 26ai  
$pow 26ai  
$round 26ai  
$sqrt 26ai  
$subtract 26ai  
$trunc 26ai  

関連項目:

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

表3-31 三角法式演算子

演算子 サポート(開始時期) ノート
$sin 26ai  
$cos 26ai  
$tan 26ai  
$asin 26ai  
$acos 26ai  
$atan 26ai  
$atan2 26ai  
$sinh 26ai  
$tanh 26ai  
$degreesToRadians 26ai  
$radiansToDegrees 26ai  

表3-32 配列式演算子

演算子 サポート(開始時期) ノート
$arrayElemAt 26ai  
$arrayToObject 26ai  
$concatArrays 26ai  
$filter 26ai  
$first 26ai  
$firstN 26ai  
$in 26ai  
$indexOfArray 26ai  
$isArray 26ai  
$last 26ai  
$lastN 26ai  
$objectToArray 26ai  
$range 26ai  
$reduce 26ai  
$reverseArray 26ai  
$size 26ai  
$slice 26ai  
$sortArray 26ai  
$zip 26ai  

関連項目:

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

表3-33 ブール式演算子

演算子 サポート(開始時期) ノート
$and 26ai  
$not 26ai  
$or 26ai  

関連項目:

MongoDBリファレンス・マニュアルのブール式演算子

表3-34 比較式演算子

演算子 サポート(開始時期) ノート
$cmp 26ai  
$eq 26ai  
$gt 26ai  
$gte 26ai  
$lt 26ai  
$lte 26ai  
$ne 26ai  

関連項目:

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

表3-35 条件式演算子

演算子 サポート(開始時期) ノート
$cond 26ai  
$ifNull 26ai  
$switch 26ai  

関連項目:

MongoDBリファレンス・マニュアルの条件式演算子

表3-36 日付式演算子

演算子 サポート(開始時期) ノート
$dateAdd なし  
$dateDiff なし  
$dateFromParts 26ai  
$dateFromString 26ai  
$dateSubtract なし  
$dateToParts 26ai  
$dateToString 26ai  
$dateTrunc なし  
$dayOfMonth 26ai  
$dayOfWeek 26ai  
$dayOfYear 26ai  
$hour 26ai  
$isoDayOfWeek 26ai  
$isoWeek 26ai  
$isoWeekYear 26ai  
$millisecond 26ai  
$minute 26ai  
$month 26ai  
$second 26ai  
$week 26ai  
$year 26ai  

関連項目:

MongoDBリファレンス・マニュアルの日付式演算子

表3-37 リテラル式演算子($literal)

演算子 サポート(開始時期) ノート
$literal 26ai  

関連項目:

MongoDBリファレンス・マニュアルのリテラル式演算子

表3-38 オブジェクト式演算子

演算子 サポート(開始時期) ノート
$mergeObjects 26ai  
$objectToArray 26ai  
$setField なし  

関連項目:

MongoDBリファレンス・マニュアルのオブジェクト式演算子

表3-39 設定式演算子

演算子 サポート(開始時期) ノート
$anyElementFalse なし  
$anyElementTrue なし  
$setDifference なし  
$setEquals なし  
$setIntersection 26ai  
$setIsSubset なし  
$setUnion 26ai  

関連項目:

MongoDBリファレンス・マニュアルの設定式演算子

表3-40 文字列式演算子

演算子 サポート(開始時期) ノート
$concat 26ai  
$indexOfBytes なし  
$indexOfCP 26ai  
$ltrim 26ai  
$regexFind なし  
$regexFindAll なし  
$regexMatch なし  
$replaceAll なし  
$replaceOne なし  
$rtrim 26ai  
$split 26ai  
$strcasecmp 26ai  
$strLenBytes なし  
$strLenCP 26ai  
$substr 26ai  
$substrBytes なし  
$substrCP 26ai  
$toLower 26ai  
$toUpper 26ai  
$trim 19c  

関連項目:

MongoDBリファレンス・マニュアルの文字列式演算子

表3-41 テキスト式演算子($meta)

演算子 サポート(開始時期) ノート
$meta なし  

関連項目:

MongoDBリファレンス・マニュアルのテキスト式演算子

表3-42 型式演算子

演算子 サポート(開始時期) ノート
$convert 26ai  
$isNumber 26ai  
$toBool 26ai  
$toDate 26ai  
$toDecimal なし  
$toDouble 26ai  
$toInt 26ai  
$toLong 26ai  
$toObjectId 26ai  
$toString 26ai  
$type 26ai  

関連項目:

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

表3-43 アキュムレータ式演算子

演算子 サポート(開始時期) ノート
$accumulator なし サーバー側のJavaScriptは非推奨となっています。MongoDBドキュメントを参照してください。
$addToSet 26ai  
$avg 26ai  
$bottom 26ai  
$bottomN なし  
$count 26ai  
$first 26ai  
$firstN なし  
$last 26ai  
$lastN なし  
$max 26ai  
$maxN なし  
$min 26ai  
$push 26ai  
$stdDevPop 26ai  
$stdDevSamp 26ai  
$sum 26ai  
$top 26ai  
$topN なし  

関連項目:

MongoDBリファレンス・マニュアルのアキュムレータ($group)およびアキュムレータ($project)

表3-44 変数式演算子

演算子 サポート(開始時期) ノート
$let 26ai  

関連項目:

MongoDBリファレンス・マニュアルの変数式演算子

表3-45 システム変数

変数 サポート(開始時期) ノート
$$CURRENT 26ai  
$$DESCEND なし  
$$KEEP なし  
$$PRUNE なし  
$$REMOVE なし  
$$ROOT 26ai  

関連項目:

MongoDBリファレンス・マニュアルの集計式の変数

表3-46 その他の演算子

演算子 サポート(開始時期) ノート
$binarySize 26ai  
$getField なし  
$rand 26ai  
$sampleRate なし  
$map 26ai  
$function なし サーバー側のJavaScriptは非推奨となっています。MongoDBドキュメントを参照してください。

$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`}]);

関連項目:

データ型

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

索引および索引プロパティ

MongoDBの索引および索引プロパティのサポートについて説明します。

ノート:

テキスト索引を除くすべての索引、およびすべての索引オプションは、Oracle Database 19cでは無視されます。索引は、Oracle AI Database 26ai以降でサポートされています。

表3-48 索引

索引タイプ サポート(開始時期) ノート
2d索引 なし  
2dsphere索引 なし コレクションのバッキング表でSQL CREATE INDEXを使用してOracle AI Database空間索引を作成できます。
複合複数キー索引 26ai 下のノートを参照してください。
ハッシュ索引 なし  
単一フィールド複数キー索引 26ai 下のノートを参照してください。
テキスト索引 19c  

ノート:

コレクションのバッキング表でSQL CREATE INDEXを使用して、適切なOracle AI Database索引を作成できます。JSONデータの索引を参照してください。

フィールドに配列値を指定できない場合は、json_valueファンクション・ベースの索引を作成します。それ以外の場合は、マテリアライズド・ビューに対して索引を使用します。JSON_TABLEに対してマテリアライズド・ビューを使用するためのJSON問合せリライトを参照してください。

関連項目:

MongoDBリファレンス・マニュアルの索引タイプ

表3-49 索引オプション

索引オプション サポート(開始時期) ノート
background No-op MongoDBでは非推奨となっています。Oracle AI Databaseでは無視されます。
collation なし  
expireAfterSeconds 26ai  
hidden なし  
online 26ai Oracle AI Databaseに固有です。指定できる値はtrue (デフォルト)またはfalseです。Trueは、索引作成中に表に対するDML操作を許可するということです。
partialFilterExpression なし  
sparse 26ai  
storageEngine なし  
unique 26ai  

関連項目:

MongoDBリファレンス・マニュアルの索引プロパティ



脚注の説明

脚注1: Oracle AI 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;