ネストされたデータ型の操作
Oracle NoSQL Databaseは、ネストされたデータ型をサポートしています。つまり、あるデータ型を別のデータ型内に含めることができます。たとえば、配列内のレコード、配列内の配列などです。サンプルのBaggageinfo
スキーマでは、配列の配列のネストされたデータ型を使用します。
例1: チケット番号が1762330498104の乗客について、第1区間で実行された様々なアクションをフェッチします。
SELECT bagDet.fullName, bagDet.bagInfo[].flightLegs[0].values().values() AS Action
FROM BaggageInfo bagDet WHERE ticketNo=1762330498104
説明: 前述の問合せでは、
flightLegs
はネストされたデータ型です。この配列には、レコードの配列であるactions
配列があります。前述の問合せは2つのステップで実行されます。
$bag.bagInfo[].flightLegs[0].values()
は、flightLegs
配列の最初のレコードのすべてのエントリを示します。これには、actions
配列が含まれます。これを(values()
を使用して)繰り返し、次に示すようにactions
配列のすべてのレコードを取得できます。$bag.bagInfo[].flightLegs[0].values().values()
は、actions
配列のすべてのレコードを示します。
出力:
{"fullName":"Michelle Payne",
"Action":["SFO","ONLOAD to IST","2019-02-02T12:10:00Z","SFO",
"BagTag Scan at SFO","2019-02-02T11:47:00Z","SFO",
"Checkin at SFO","2019-02-02T10:01:00Z"]}
例2: チケット番号が1762340683564の乗客について、第1区間で実行された最後のトランジット・アクションの更新の詳細を表示します。
SELECT bagDet.fullName, (bagDet.bagInfo[].flightLegs[0].values())[2].actionCode
AS lastTransit_Update FROM BaggageInfo bagDet WHERE ticketNo=1762340683564
説明: 前述の問合せは次のステップを使用して処理されます。
$bagDet.bagInfo[].flightLegs[0].values()
は、flightLegs
配列の最初のレコードのすべてのエントリを示します。bagInfo[].flightLegs[0].values())[2]
は、flightLegs
配列の最初の要素内のactions
配列の3番目(最後)のレコードを示します。- actions配列に複数のレコードがあります。
bagInfo[].flightLegs[0].values())[2].actionCode
は、actionCode
要素に対応する値をフェッチします。
出力:
{"fullName":"Mary Watson","lastTransit_Update":"Checkin at YYZ"}
ノート:
後の項で、size関数を使用して配列索引をハードコードすることなく、一般的な方法で同じ問合せを記述する方法について学習します。「複合データ型のサイズの検索」を参照してください。