TairDocはRedisJSONに似たドキュメントデータ構造です。 TairDocを使用して、作成、読み取り、更新、および削除 (CRUD) 操作を実行できます。
概要
特徴
JSON標準を完全にサポートします。
JSONPath RFC draft-ietf-jsonpath-baseバージョン04と互換性があります。
説明JSON.GETコマンドのみがこのドラフトバージョンをサポートしています。
JSONポインターを完全にサポートします。
子要素の検索を簡単にするために、データをバイナリツリーに格納します。
JSON形式からXMLまたはYAML形式への変換をサポートします。
リリースノート
TairDocは、Tair DRAMベースのインスタンスシリーズとともにリリースされます。 TairDocは、完全なJSON Pointer構文と部分的なJSONPath構文と互換性があります。 JSON.GETのみがJSONPath構文をサポートしています。
2022年5月17日、JSON.GETコマンドのJSONPath構文を完全にサポートするTairDoc V1.8.4がリリースされました。 インスタンスのマイナーバージョンを1.8.4以降に更新することを推奨します。
TairDoc V1.8.4は、ドットワイルドカードセレクター、インデックスセレクター、フィルターセレクターなどの特定のセレクターもサポートしています。
前提条件
Tair DRAMベースのインスタンスが作成されます。
最新のマイナーバージョンは、より多くの機能とより高い安定性を提供します。 インスタンスを最新のマイナーバージョンに更新することを推奨します。 詳細については、「インスタンスのマイナーバージョンの更新」をご参照ください。 インスタンスがクラスターまたは読み書き分離インスタンスの場合、インスタンスのプロキシノードを最新のマイナーバージョンに更新することを推奨します。 これにより、すべてのコマンドを期待どおりに実行できます。
使用上の注意
管理するTairDocデータは、Tair DRAMベースのインスタンスに保存されます。
サポートされるコマンド
表 1. TairDocコマンド
コマンド | 構文 | 説明 |
| TairDocキーを作成し、キー内のパスにJSON要素を格納します。 キーとパスがすでに存在する場合、このコマンドはキーのパスの要素を更新します。 | |
| TairDocキーのパスでJSON要素を取得します。 | |
| TairDocキーのパスからJSON要素を削除します。 パスが指定されていない場合、キーは削除されます。 キーまたはパスが存在しない場合、このコマンドは無視されます。 | |
| TairDocキーのパスでJSON要素の型を取得します。 要素タイプには、 | |
| JSON値を、TairDocキーのパスに格納されているJSONデータにマージします。 このコマンドでは、新しい値の追加、既存の値の更新、指定したパスの値の削除などの操作を実行できます。 | |
| TairDocキーのパスのJSON値を指定された値だけ増分します。 JSON値とインクリメントする値は、整数型またはdouble型の両方である必要があります。 | |
| TairDocキーのパスでjson値にJSON-string値を追加します。 json-string値とJSON値は両方ともstring型である必要があります。 | |
| TairDocキーのパスでJSON要素の文字列の長さを取得します。 JSON要素は文字列型である必要があります。 | |
| TairDocキーのパスにある配列にJSON要素を追加します。 | |
| 配列内の指定されたインデックスと一致する要素を削除し、TairDocキー内のパスにある要素を返します。 | |
| TairDocキーで指定されたインデックスの前のパスでJSON要素を配列に挿入します。 | |
| TairDocキーのパスで配列の長さを取得します。 | |
| TairDocキーのパスで配列をトリミングします。 このコマンドは、開始値と停止値の範囲内にある配列内の要素を保持します。 | |
| 1つ以上のTairDocキーを削除します。 これはネイティブのRedisコマンドです。 |
このトピックで使用されるコマンド構文の規則を次に示します。
Uppercase keyword
: commandキーワードを示します。イタリックテキスト
: 変数を示します。[options]
: 囲まれたパラメータがオプションであることを示します。 括弧で囲まれていないパラメータを指定する必要があります。A | B
: 縦棒 (|) で区切られたパラメータが相互に排他的であることを示します。 指定できるパラメーターは1つだけです。...
: このシンボルの前にあるパラメーターを繰り返し指定できることを示します。
JSON.SET
項目 | 説明 |
構文 |
|
時間の複雑さ | O(N) |
コマンド説明 | TairDocキーを作成し、キー内のパスにJSON要素を格納します。 キーとパスがすでに存在する場合、このコマンドはキーのパスの要素を更新します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
JSON.GET
項目 | 説明 |
構文 |
|
時間の複雑さ | O(N) |
コマンド説明 | TairDocキーのパスでJSON要素を取得します。 |
パラメーター |
説明 ROOTNAMEおよびARRNAMEパラメーターは、FORMATパラメーターがXMLに設定されている場合にのみ有効です。 |
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.DEL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(N) |
コマンド説明 | TairDocキーのパスからJSON要素を削除します。 パスが指定されていない場合、キーは削除されます。 キーまたはパスが存在しない場合、このコマンドは無視されます。 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.TYPE
項目 | 説明 |
構文 |
|
時間の複雑さ | O(N) |
コマンド説明 | TairDocキーのパスでJSON要素の型を取得します。 要素タイプには、 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.MERGE
項目 | 説明 |
構文 |
|
時間の複雑さ | O(N) |
コマンド説明 | JSON値を、TairDocキーのパスに格納されているJSONデータにマージします。 このコマンドでは、新しい値の追加、既存の値の更新、指定したパスの値の削除などの操作を実行できます。 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.NUMINCRBY
項目 | 説明 |
構文 |
|
時間の複雑さ | O(N) |
コマンド説明 | TairDocキーのパスのJSON値を指定された値だけ増分します。 JSON値とインクリメントする値は、整数型またはdouble型の両方である必要があります。 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.STRAPPEND
項目 | 説明 |
構文 |
|
時間の複雑さ | O(N) |
コマンド説明 | TairDocキーのパスでjson値にJSON-string値を追加します。 json-string値とJSON値は両方ともstring型である必要があります。 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.STRLEN
項目 | 説明 |
構文 |
|
時間の複雑さ | O(N) |
コマンド説明 | TairDocキーのパスでJSON要素の文字列の長さを取得します。 JSON要素は文字列型である必要があります。 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.ARRAPPEND
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、Mは追加するJSON要素の数を指定し、Nは配列内の要素の数を指定します。 |
コマンド説明 | TairDocキーのパスにある配列にJSON要素を追加します。 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.ARRPOP
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、Mは、キー内の子要素の数を指定し、Nは、配列内の要素の数を指定する。 |
コマンド説明 | 配列内の指定されたインデックスと一致する要素を削除し、TairDocキー内のパスにある要素を返します。 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.ARRINSERT
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、Mは挿入するJSON要素の数を指定し、Nは配列内の要素の数を指定します。 |
コマンド説明 | TairDocキーで指定されたインデックスの前のパスでJSON要素を配列に挿入します。 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.ARRLEN
項目 | 説明 |
構文 |
|
時間の複雑さ | O(N) |
コマンド説明 | TairDocキーのパスで配列の長さを取得します。 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.ARRTRIM
項目 | 説明 |
構文 |
|
時間の複雑さ | O(N) |
コマンド説明 | TairDocキーのパスで配列をトリミングします。 このコマンドは、開始値と停止値の範囲内にある配列内の要素を保持します。 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSONPath
次の表に、TairDocでサポートされているJSONPath構文の要素を示します。
JSONPath要素 | 説明 |
¥ | ルート要素。 |
@ | 現在の要素。 |
. 名前 | 子要素。 |
.. | 位置が要件を満たす要素。 |
* | すべての子要素または配列要素を表すことができるワイルドカード。 |
[ ] | 配列のインデックス。 インデックスは0から始まります。 例: [0] 。 この要素では、リストと要素名がサポートされています。 例: [0,1] と ['name'] 。 |
[start:end: ステップ] | 配列スライスセレクタ。 要素は、ステップの増分で開始から終了まで取得されます。 例えば、[0:3:1] は、要素が0番目から3番目まで選択されることを示す。 この例では、インクリメントが − 1の場合、3番目から0番目までの要素が選択される。 |
?... | フィルターセレクター。 |
() |
|
例
JSONドキュメントを作成します。
サンプルコマンド:
JSON.SET dockey $ '{ "store": { "book": [{ "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } }, "expensive": 10 }'
期待される出力:
OK
ドキュメントを照会します。
サンプルクエリ:
ルートセレクター
# Query the entire JSON document. JSON.GET dockey $ # Expected output: "[{"store":{"book":[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],"bicycle":{"color":"red","price":19.95}}}]"
ドットセレクタ
# Query all information about the bicycle in the store. JSON.GET dockey $.store.bicycle.* # Expected output: "["red",19.95]" # Query the price of the bicycle. JSON.GET dockey $.store.bicycle.price # Expected output: "[19.95]"
インデックスセレクタ
# Query all information about the first book in the store. JSON.GET dockey $.store.book[0] # Expected output: "[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95}]" # Query the titles of all books in the store. JSON.GET dockey "$.store.book[*]['title']" # Expected output: "["Sayings of the Century","Sword of Honour","Moby Dick","The Lord of the Rings"]"
配列のスライスのセレクター
# Query all information about the first three books by using the array slice selector in increments of 1. JSON.GET dockey $.store.book[0:2:1] # Expected output: "[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]"
子孫セレクター
# Query all the values of the price element in the store, including those of books and bicycles. JSON.GET dockey $..price # Expected output: "[8.95,12.99,8.99,22.99,19.95]"
リストセレクタ
# # Query all information about the first and third books in the store. JSON.GET dockey $.store.book[0,2] # Expected output: "[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]"
フィルターセレクタ
# An @ expression. # Query the information about books that have the isbn element in the store. JSON.GET dockey $.store.book[?(@.isbn)] # Expected output: "[{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]" # A COMP expression. # Query the information about books whose prices are less than 10. JSON.GET dockey '$.store.book[?(@.price < 10)]' # Expected output: "[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]" # A combined expression. # Query the information about books whose prices are equal to 12.99 or greater than 19.95 or whose values of the category element are reference. JSON.GET dockey "$..book[?((@.price == 12.99 || @.price > $.store.bicycle.price) || @.category == 'reference')]" # Expected output: "[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]"
JSONPointer
TairDocは完全なJSONPointer構文をサポートします。 詳細については、「JavaScript Object Notation (JSON) Pointer」をご参照ください。
次のコードは例を示しています。
JSON.SET docを実行します。 '{"foo": "bar", "baz" : [1,2,3]}'
コマンド
サンプルコマンド:
# Obtain the first value of the .baz element in doc.
JSON.GET doc /baz/0
サンプル出力:
"1"