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キーのパスで配列に1つ以上のJSON要素を追加します。 | |
| 配列内の指定されたインデックスと一致する要素を削除し、TairDocキー内のパスにある要素を返します。 | |
| TairDocキーで指定されたインデックスの前のパスで、1つ以上の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キーのパスで配列に1つ以上のJSON要素を追加します。 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.ARRPOP
パラメーター | 説明 |
構文 |
|
時間の複雑さ | ここで、Mは、キー内の子要素の数を指定し、Nは、配列内の要素の数を指定する。 |
コマンド説明 | 配列内の指定されたインデックスと一致する要素を削除し、TairDocキー内のパスにある要素を返します。 |
パラメーター |
|
Output |
|
例: |
サンプルコマンド:
サンプル出力:
|
JSON.ARRINSERT
パラメーター | 説明 |
構文 |
|
時間の複雑さ | ここで、Mは挿入するJSON要素の数を指定し、Nは配列内の要素の数を指定します。 |
コマンド説明 | TairDocキーで指定されたインデックスの前のパスで、1つ以上の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}}}]"
ドットセレクタ
# ストア内の自転車に関するすべての情報を照会します。 JSON.GET dockey $.store.bicycle.* # 期待される出力: "[" 赤 "、19.95]" # 自転車の価格を照会します。 JSON.GET dockey $.store.bicycle.price # 期待される出力: "[19.95]"
インデックスセレクタ
# ストア内の最初のブックに関するすべての情報を照会します。 JSON.GET dockey $.store.book[0] # 期待される出力: "[{" category ":" reference "," author ":" Nigel Rees "," title ":" Sayings of the Century "," price ":8.95}]" # ストア内のすべての書籍のタイトルを照会します。 JSON.GET dockey "$.store.book[*]['title']" # 期待される出力: "[" Sayings of the Century "、" Sword of Honour "、" Moby Dick "、" The Lord of the Rings "]"
配列のスライスのセレクター
# 配列スライスセレクタを1単位で使用して、最初の3つのブックに関するすべての情報を照会します。 JSON.GET dockey $.store.book[0:2:1] # 期待される出力: "[{" 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}]"
子孫セレクター
# 書籍や自転車の値を含め、ストア内の価格要素のすべての値を照会します。 JSON.GET dockey $.. price # 期待される出力: "[8.95、12.99、8.99、22.99、19.95]"
リストセレクタ
# # ストア内の1冊目と3冊目の書籍に関するすべての情報を照会します。 JSON.GET dockey $.store.book[0,2] # 期待される出力: "[{" 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}]"
フィルターセレクタ
# @ 式。 # ストア内のisbn要素を持つブックに関する情報を照会します。 JSON.GET dockey $.store.book[?(@.isbn)] # 期待される出力: "[{" 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}]" # COMP式。 # 価格が10未満の書籍に関する情報を照会します。 JSON.GET dockey '$.store.book[?(@.price < 10)]' # 期待される出力: "[{" 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}]" # 結合式。 # 価格が12.99以上である、またはcategory要素の値が参照である書籍に関する情報を照会し19.95。 JSON.GET dockey "$.. book[?((@.price == 12.99 | @.price > $.store.bicycle.price) | | @.category == 'reference')]" # 期待される出力: "[{" category ":" reference "、" author ":" Nigel Rees "、" title ":" Sayings of the Century "、" price ":8.95 },{" category ":" fiction "、" author ":" J。 R. R. トールキン "、" 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"