TairDoc は RedisJSON に似たドキュメントデータ構造です。TairDoc を使用して、作成・読取・更新・削除 (CRUD) 操作を実行できます。
概要
主な特徴
JSON 標準を完全にサポートします。
JSONPath RFC draft-4 標準と部分的に互換性があります。
説明JSON.GET コマンドのみがこのドラフトバージョンをサポートします。
JSONPointer 構文を完全にサポートします。
バイナリツリーデータストレージにより、子要素の取得が簡素化されます。
JSON フォーマットから XML または YAML フォーマットへの変換。
リリースノート
TairDoc は Tair メモリ最適化インスタンスとともにリリースされました。TairDoc は、完全な JSONPointer 構文と部分的な JSONPath 構文をサポートします (JSON.GET コマンドのみが JSONPath 構文をサポートします)。
2022 年 5 月 17 日に、JSON.GET コマンドの JSONPath 構文を完全にサポートする TairDoc V1.8.4 がリリースされました。インスタンスのマイナーバージョンを 1.8.4 以降に更新することを推奨します。
TairDoc V1.8.4 は、ドットワイルドカードセレクター、インデックスセレクター、フィルターセレクターなどの特定のセレクターもサポートします。
前提条件
Tair DRAM ベースのインスタンスが作成されていること。
最新のマイナーバージョンは、より多くの機能と高い安定性を提供します。インスタンスを最新のマイナーバージョンに更新することを推奨します。詳細については、「インスタンスのマイナーバージョンを更新する」をご参照ください。インスタンスがクラスターまたは読み書き分離インスタンスである場合は、インスタンス内のプロキシノードを最新のマイナーバージョンに更新することを推奨します。これにより、すべてのコマンドが期待どおりに実行されることが保証されます。
考慮事項
これらの操作は、Tair インスタンスの TairDoc データに対して実行されます。
コマンドリスト
表 1. TairDoc コマンド
コマンド | 構文 | 説明 |
| TairDoc キーを作成し、キーのパスに JSON 要素を格納します。キーとパスが既に存在する場合、このコマンドはキーのパス内の要素を更新します。 | |
| TairDoc キーのパスから JSON 要素を取得します。 | |
| TairDoc キーのパスから JSON 要素を削除します。パスが指定されていない場合、キーが削除されます。キーまたはパスが存在しない場合、このコマンドは無視されます。 | |
| TairDoc キーのパスにある JSON 要素の型を取得します。指定できる型は、 | |
| JSON 値を指定されたキーのパスにマージします。このコマンドを使用すると、指定されたパスで新しい値の追加、既存の値の更新、値の削除などの操作を実行できます。 | |
| TairDoc キーのパスにある JSON 要素の値を増やします。要素と、要素に追加する値は、両方とも同じデータ型の整数または double である必要があります。 | |
| json-string 値を TairDoc キーのパスにある JSON 要素に追加します。json-string 値と JSON 要素は両方とも文字列型である必要があります。 | |
| TairDoc キーのパスから JSON 要素の文字列長を取得します。JSON 要素は文字列型である必要があります。 | |
| TairDoc キーのパスにある配列の末尾に 1 つ以上の JSON 要素を追加します。 | |
| TairDoc キーパスの配列内で指定されたインデックスに一致する要素を削除して返します。 | |
| TairDoc キーの指定されたインデックスの前のパスにある配列に 1 つ以上の JSON 要素を挿入します。 | |
| TairDoc キーのパスにある配列の長さを取得します。 | |
| TairDoc キーのパスにある配列をトリミングします。このコマンドは、開始値と停止値の範囲内にある配列内の要素を保持します。 | |
| 1 つ以上の TairDoc キーを削除します。これはネイティブの Redis コマンドです。 |
次のリストは、このトピックで使用されるコマンド構文の規則について説明しています。
大文字のキーワード: コマンドキーワードを示します。イタリック体のテキスト: 変数を示します。[options]: 角括弧で囲まれたパラメーターがオプションであることを示します。角括弧で囲まれていないパラメーターは指定する必要があります。A|B: 縦棒 (|) で区切られたパラメーターが相互排他的であることを示します。パラメーターのいずれか 1 つのみを指定できます。...: この記号の前のパラメーターを繰り返し指定できることを示します。
JSON.SET
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N) |
コマンドの説明 | TairDoc キーを作成し、キーのパスに JSON 要素を格納します。キーとパスが既に存在する場合、このコマンドはキーのパス内の要素を更新します。 |
オプション |
|
戻り値 |
|
例 | コマンド例: 応答例: |
JSON.GET
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N) |
コマンドの説明 | TairDoc キーのパスから JSON 要素を取得します。 |
オプション |
説明 ROOTNAME および ARRNAME パラメーターは、FORMAT パラメーターが XML に設定されている場合にのみ有効です。 |
戻り値 |
|
例 | 事前に コマンド例: 応答例:"<?xml version=\"1.0\" encoding=\"UTF-8\"?><ROOT><foo>bar</foo><baz>42</baz></ROOT>" |
JSON.DEL
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N) |
コマンドの説明 | TairDoc キーのパスから JSON 要素を削除します。パスが指定されていない場合、キーが削除されます。キーまたはパスが存在しない場合、このコマンドは無視されます。 |
オプション |
|
戻り値 |
|
例 | 事前に コマンド例: 応答例: |
JSON.TYPE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N) |
コマンドの説明 | TairDoc キーのパスにある JSON 要素の型を取得します。指定できる型は、 |
オプション |
|
戻り値 |
|
例 | 事前に コマンド例: 応答例: |
JSON.MERGE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N) |
コマンドの説明 | JSON 値を指定されたキーのパスにマージします。このコマンドを使用すると、指定されたパスで新しい値の追加、既存の値の更新、値の削除などの操作を実行できます。 |
オプション |
|
戻り値 |
|
例 | 事前に コマンド例: 応答例: コマンドを実行すると、 |
JSON.NUMINCRBY
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N) |
コマンドの説明 | TairDoc キーのパスにある JSON 要素の値を増やします。要素と、要素に追加する値は、両方とも同じデータ型の整数または double である必要があります。 |
オプション |
|
戻り値 |
|
例 | 事前に コマンド例: 応答例: |
JSON.STRAPPEND
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N) |
コマンドの説明 | json-string 値を TairDoc キーのパスにある JSON 要素に追加します。json-string 値と JSON 要素は両方とも文字列型である必要があります。 |
オプション |
|
戻り値 |
|
例 | 事前に コマンド例: 応答例: |
JSON.STRLEN
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N) |
コマンドの説明 | TairDoc キーのパスから JSON 要素の文字列長を取得します。JSON 要素は文字列型である必要があります。 |
オプション |
|
戻り値 |
|
例 | 事前に コマンド例: 応答例: |
JSON.ARRAPPEND
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(M×N)。M は追加する JSON 要素の数、N は配列内の要素の数を指定します。 |
コマンドの説明 | TairDoc キーのパスにある配列の末尾に 1 つ以上の JSON 要素を追加します。 |
オプション |
|
戻り値 |
|
例 | 事前に コマンド例: 応答例: |
JSON.ARRPOP
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(M×N)。M はキーの子要素、N は配列内の要素の数を指定します。 |
コマンドの説明 | TairDoc キーパスの配列内で指定されたインデックスに一致する要素を削除して返します。 |
オプション |
|
戻り値 |
|
例 | 事前に コマンド例: 応答例: |
JSON.ARRINSERT
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(M×N)。M は挿入する JSON 要素の数、N は配列内の要素の数を指定します。 |
コマンドの説明 | TairDoc キーの指定されたインデックスの前のパスにある配列に 1 つ以上の JSON 要素を挿入します。 |
オプション |
|
戻り値 |
|
例 | 事前に コマンド例: 応答例: |
JSON.ARRLEN
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N) |
コマンドの説明 | TairDoc キーのパスにある配列の長さを取得します。 |
オプション |
|
戻り値 |
|
例 | 事前に コマンド例: 応答例: |
JSON.ARRTRIM
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N) |
コマンドの説明 | TairDoc キーのパスにある配列をトリミングします。このコマンドは、開始値と停止値の範囲内にある配列内の要素を保持します。 |
オプション |
|
戻り値 |
|
例 | 事前に コマンド例: 応答例: |
JSONPath
TairDoc は、次の互換性のある JSONPath 構文をサポートします。
JSONPath | 説明 |
$ | ルート要素。 |
@ | 現在の要素。 |
.name | 子要素。 |
.. | 要件を満たす位置にある要素。 |
* | すべての子要素または配列要素を表すことができるワイルドカード。 |
[ ] | 配列のインデックス。0 から始まります。例: [0]。この要素はリストと要素名をサポートします。例: [0,1] および ['name']。 |
[start:end:step] | 配列スライスセレクター。要素は、start から end まで step の増分で取得されます。たとえば、[0:3:1] は、0 番目の要素から 3 番目の要素までが選択されることを示します。増分が -1 の場合 (例: [3:0:-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ドキュメントをクエリします。
クエリの例:
ルートセレクター
# JSON オブジェクト全体をクエリします。 JSON.GET 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}}}]"ドットセレクター
# ストア内の自転車に関するすべての情報をクエリします。 JSON.GET dockey $.store.bicycle.* # 想定される出力: "["red",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 の配列スライスを使用して、ストア内の 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 と等しいか 19.95 より大きい、または category 要素の値が reference である本に関する情報をクエリします。 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. 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]}' コマンドを実行できます。
コマンド例:
# doc キーの .baz 配列の最初の値を取得します。
JSON.GET doc /baz/0応答例:
"1"