すべてのプロダクト
Search
ドキュメントセンター

Tair (Redis® OSS-Compatible):ドク

最終更新日:Dec 09, 2024

TairDocはRedisJSONに似たドキュメントデータ構造です。 TairDocを使用して、作成、読み取り、更新、および削除 (CRUD) 操作を実行できます。

概要

特徴

  • JSON標準を完全にサポートします。

  • JSONPath RFC draft-ietf-jsonpath-baseバージョン04と互換性があります。

    説明

    JSON.GETコマンドのみがこのドラフトバージョンをサポートしています。

  • JSONポインターを完全にサポートします。

  • 子要素の検索を簡単にするために、データをバイナリツリーに格納します。

  • JSON形式からXMLまたはYAML形式への変換をサポートします。

リリースノート

  1. TairDocは、Tair DRAMベースのインスタンスシリーズとともにリリースされます。 TairDocは、完全なJSON Pointer構文と部分的なJSONPath構文と互換性があります。 JSON.GETのみがJSONPath構文をサポートしています。

  2. 2022年5月17日、JSON.GETコマンドのJSONPath構文を完全にサポートするTairDoc V1.8.4がリリースされました。 インスタンスのマイナーバージョンを1.8.4以降に更新することを推奨します。

    TairDoc V1.8.4は、ドットワイルドカードセレクター、インデックスセレクター、フィルターセレクターなどの特定のセレクターもサポートしています。

前提条件

Tair DRAMベースのインスタンスが作成されます。

説明

最新のマイナーバージョンは、より多くの機能とより高い安定性を提供します。 インスタンスを最新のマイナーバージョンに更新することを推奨します。 詳細については、「インスタンスのマイナーバージョンの更新」をご参照ください。 インスタンスがクラスターまたは読み書き分離インスタンスの場合、インスタンスのプロキシノードを最新のマイナーバージョンに更新することを推奨します。 これにより、すべてのコマンドを期待どおりに実行できます。

使用上の注意

管理するTairDocデータは、Tair DRAMベースのインスタンスに保存されます。

サポートされるコマンド

表 1. TairDocコマンド

コマンド

構文

説明

JSON.SET

JSON.SETキーパスjson [NX | XX]

TairDocキーを作成し、キー内のパスにJSON要素を格納します。 キーとパスがすでに存在する場合、このコマンドはキーのパスの要素を更新します。

JSON.GET

JSON.GETキーパス [FORMAT XML | YAML] [ROOTNAME root] [ARRNAME arr]

TairDocキーのパスでJSON要素を取得します。

JSON.DEL

JSON.DELキーパス

TairDocキーのパスからJSON要素を削除します。 パスが指定されていない場合、キーは削除されます。 キーまたはパスが存在しない場合、このコマンドは無視されます。

JSON.TYPE

JSON.TYPEキーパス

TairDocキーのパスでJSON要素の型を取得します。 要素タイプには、booleanstringnumberarrayobjectrawreferenceconstnullが含まれます。

JSON.MERGE

JSON.MERGEキーパス値

JSON値を、TairDocキーのパスに格納されているJSONデータにマージします。 このコマンドでは、新しい値の追加、既存の値の更新、指定したパスの値の削除などの操作を実行できます。

JSON.NUMINCRBY

JSON.NUMINCRBYキーパス値

TairDocキーのパスのJSON値を指定された値だけ増分します。 JSON値とインクリメントする値は、整数型またはdouble型の両方である必要があります。

JSON.STRAPPEND

JSON.STRAPPENDキーパスjson-string

TairDocキーのパスでjson値にJSON-string値を追加します。 json-string値とJSON値は両方ともstring型である必要があります。

JSON.STRLEN

JSON.STRLENキーパス

TairDocキーのパスでJSON要素の文字列の長さを取得します。 JSON要素は文字列型である必要があります。

JSON.ARRAPPEND

JSON.ARRAPPENDキーパスjson [json ...]

TairDocキーのパスにある配列にJSON要素を追加します。

JSON.ARRPOP

JSON.ARRPOPキーパス [インデックス]

配列内の指定されたインデックスと一致する要素を削除し、TairDocキー内のパスにある要素を返します。

JSON.ARRINSERT

JSON.ARRINSERTキーパス [インデックス] json [json ...]

TairDocキーで指定されたインデックスの前のパスでJSON要素を配列に挿入します。

JSON.ARRLEN

JSON.ARRLENキーパス

TairDocキーのパスで配列の長さを取得します。

JSON.ARRTRIM

JSON.ARRTRIMキーパス開始停止

TairDocキーのパスで配列をトリミングします。 このコマンドは、開始値と停止値の範囲内にある配列内の要素を保持します。

DEL

DEL <key> [key ...]

1つ以上のTairDocキーを削除します。 これはネイティブのRedisコマンドです。

説明

このトピックで使用されるコマンド構文の規則を次に示します。

  • Uppercase keyword: commandキーワードを示します。

  • イタリックテキスト: 変数を示します。

  • [options]: 囲まれたパラメータがオプションであることを示します。 括弧で囲まれていないパラメータを指定する必要があります。

  • A | B: 縦棒 (|) で区切られたパラメータが相互に排他的であることを示します。 指定できるパラメーターは1つだけです。

  • ...: このシンボルの前にあるパラメーターを繰り返し指定できることを示します。

JSON.SET

項目

説明

構文

JSON.SETキーパスjson [NX | XX]

時間の複雑さ

O(N)

コマンド説明

TairDocキーを作成し、キー内のパスにJSON要素を格納します。 キーとパスがすでに存在する場合、このコマンドはキーのパスの要素を更新します。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。 root要素がサポートしています。$

  • json: 追加または更新する要素。

  • NX: パスがまだ存在しない場合にのみ要素が書き込まれるように指定します。

  • XX: パスが存在する場合にのみ要素が書き込まれることを指定します。

Output

  • 操作が成功した場合、OKが返されます。

  • XXパラメーターが指定されているが、パスが存在しない場合は、nilが返されます。

  • NXパラメーターが指定され、パスがすでに存在する場合、nilが返されます。

  • 指定されたパスが無効な場合、ERRが追加するオブジェクトを見つけることができませんでした。パスを確認してくださいが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

JSON.SET doc $ '{ "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 } } }'

サンプル出力:

OK

JSON.GET

項目

説明

構文

JSON.GETキーパス [FORMAT XML | YAML] [ROOTNAME root] [ARRNAME arr]

時間の複雑さ

O(N)

コマンド説明

TairDocキーのパスでJSON要素を取得します。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。 このパラメーターは、柔軟なクエリ用にJSONPath構文とJSON構文をサポートします。 詳細については、このトピックの「JSONPath」および「JSONPointer」セクションを参照してください。

  • FORMAT: 要素のJSON形式。 有効な値: XMLおよびYAML。

  • ROOTNAME: XML構文のルート要素のタグ。

  • ARRNAME: XML構文の配列要素のタグ。

説明

ROOTNAMEおよびARRNAMEパラメーターは、FORMATパラメーターがXMLに設定されている場合にのみ有効です。

Output

  • 操作が成功すると、JSON要素が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

JSON.SET docを実行します。 '{"foo": "bar", "baz" : 42}' コマンド

サンプルコマンド:

JSON.GET doc . FORMAT XML ROOTNAME ROOT ARRNAME ARR

サンプル出力:

"<?xml version=\"1.0\" encoding=\"UTF-8\"?><ROOT><foo>bar</foo><baz>42</baz></ROOT>"

JSON.DEL

項目

説明

構文

JSON.DELキーパス

時間の複雑さ

O(N)

コマンド説明

TairDocキーのパスからJSON要素を削除します。 パスが指定されていない場合、キーは削除されます。 キーまたはパスが存在しない場合、このコマンドは無視されます。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。

Output

  • 操作が成功した場合、値1が返されます。

  • 操作が失敗した場合、値0が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

JSON.SET docを実行します。 '{"foo": "bar", "baz" : 42}' コマンド

サンプルコマンド:

JSON.DEL doc .foo

サンプル出力:

(integer) 1

JSON.TYPE

項目

説明

構文

JSON.TYPEキーパス

時間の複雑さ

O(N)

コマンド説明

TairDocキーのパスでJSON要素の型を取得します。 要素タイプには、booleanstringnumberarrayobjectrawreferenceconstnullが含まれます。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。

Output

  • 操作が成功した場合、要素の型が返されます。

  • 操作が失敗した場合、値0が返されます。

  • キーまたはパスが存在しない場合は、nilが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

JSON.SET docを実行します。 '{"foo": "bar", "baz" : 42}' コマンド

サンプルコマンド:

JSON.TYPE doc .foo

サンプル出力:

string

JSON.MERGE

項目

説明

構文

JSON.MERGEキーパス値

時間の複雑さ

O(N)

コマンド説明

JSON値を、TairDocキーのパスに格納されているJSONデータにマージします。 このコマンドでは、新しい値の追加、既存の値の更新、指定したパスの値の削除などの操作を実行できます。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。 このパラメーターは、$.a.b.c$.a['b'] などの部分的なJSONPath構文をサポートしますが、$.. などの複雑な式はサポートしません。 と $*

  • value: マージするJSON値。RFC 7386で定義されているJSONマージパッチ形式をサポートします。

Output

  • 操作が成功した場合、OKが返されます。

  • 指定された値が無効な場合、マージパッチの解析に問題があることを示すエラーが発生します。

  • それ以外の場合、エラーメッセージが返されます。

例:

JSON.SET doc $ '{"f1": {"a":1}, "f2": {"a":2}} コマンドを事前に実行します。

サンプルコマンド:

JSON.MERGE doc $ '{"f1": null, "f2":{"a":3, "b":4}, "f3":[2,4,6]}'

サンプル出力:

OK

JSON.GET doc。 コマンド出力:

"{\"f2\":{\"a\":3,\"b\":4},\"f3\":[2,4,6]}"

JSON.NUMINCRBY

項目

説明

構文

JSON.NUMINCRBYキーパス値

時間の複雑さ

O(N)

コマンド説明

TairDocキーのパスのJSON値を指定された値だけ増分します。 JSON値とインクリメントする値は、整数型またはdouble型の両方である必要があります。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。

  • value: インクリメントする値。

Output

  • 操作が成功した場合、パスの結果の値が返されます。

  • キーまたはパスが存在しない場合、エラーが発生します。

  • それ以外の場合、エラーメッセージが返されます。

例:

JSON.SET docを実行します。 '{"foo": "bar", "baz" : 42}' コマンド

サンプルコマンド:

JSON.NUMINCRBY doc .baz 10

サンプル出力:

"52"

JSON.STRAPPEND

項目

説明

構文

JSON.STRAPPENDキーパスjson-string

時間の複雑さ

O(N)

コマンド説明

TairDocキーのパスでjson値にJSON-string値を追加します。 json-string値とJSON値は両方ともstring型である必要があります。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。

  • json-string: パスのJSON文字列に追加する文字列。

Output

  • 操作が成功すると、パスの文字列の新しい長さが返されます。

  • キーが存在しない場合、-1の値が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

JSON.SET docを実行します。 '{"foo": "bar", "baz" : 42}' コマンド

サンプルコマンド:

JSON.STRAPPEND doc .foo rrrrr

サンプル出力:

(integer) 8

JSON.STRLEN

項目

説明

構文

JSON.STRLENキーパス

時間の複雑さ

O(N)

コマンド説明

TairDocキーのパスでJSON要素の文字列の長さを取得します。 JSON要素は文字列型である必要があります。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。

Output

  • 操作が成功すると、パスのJSON要素の文字列の長さが返されます。

  • キーが存在しない場合、-1の値が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

JSON.SET docを実行します。 '{"foo": "bar", "baz" : 42}' コマンド

サンプルコマンド:

JSON.STRLEN doc .foo

サンプル出力:

(integer) 3

JSON.ARRAPPEND

項目

説明

構文

JSON.ARRAPPENDキーパスjson [json ...]

時間の複雑さ

ここで、Mは追加するJSON要素の数を指定し、Nは配列内の要素の数を指定します。

コマンド説明

TairDocキーのパスにある配列にJSON要素を追加します。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。

  • json: 配列に追加する要素。

Output

  • 操作が成功すると、配列内の要素数が返されます。

  • キーが存在しない場合、-1の値が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

JSON.SET docを実行します。 '{"id": [1,2,3]}' コマンド

サンプルコマンド:

JSON.ARRAPPEND doc .id null false true

サンプル出力:

(integer) 6

JSON.ARRPOP

項目

説明

構文

JSON.ARRPOPキーパス [インデックス]

時間の複雑さ

ここで、Mは、キー内の子要素の数を指定し、Nは、配列内の要素の数を指定する。

コマンド説明

配列内の指定されたインデックスと一致する要素を削除し、TairDocキー内のパスにある要素を返します。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。

  • index: 配列内のインデックス。 開始インデックスは0です。 負の値は、配列の終わりから始まる要素を指定するために使用されます。 このパラメーターを指定しない場合、配列の最後の要素と一致するインデックスが使用されます。

Output

  • 操作が成功すると、要素が削除されて返されます。

  • 配列が空の場合、「ERR array index outflow」メッセージが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

JSON.SET docを実行します。 '{"id": [1,2,3]}' コマンド

サンプルコマンド:

JSON.ARRPOP doc .id 0

サンプル出力:

"1"

JSON.ARRINSERT

項目

説明

構文

JSON.ARRINSERTキーパス [インデックス] json [json ...]

時間の複雑さ

ここで、Mは挿入するJSON要素の数を指定し、Nは配列内の要素の数を指定します。

コマンド説明

TairDocキーで指定されたインデックスの前のパスでJSON要素を配列に挿入します。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。

  • index: 配列内のインデックス。 開始インデックスは0です。 負の値は、配列の終わりから始まる要素を指定するために使用されます。 このパラメーターを指定しない場合、配列の最後の要素と一致するインデックスが使用されます。

  • json: 配列に挿入する要素。

Output

  • 操作が成功すると、配列内の要素数が返されます。

  • 配列が空の場合、「ERR array index outflow」メッセージが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

JSON.SET docを実行します。 '{"id": [1,2,3]}' コマンド

サンプルコマンド:

JSON.ARRINSERT doc .id 0 10 15

サンプル出力:

(integer) 5

JSON.ARRLEN

項目

説明

構文

JSON.ARRLENキーパス

時間の複雑さ

O(N)

コマンド説明

TairDocキーのパスで配列の長さを取得します。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。

Output

  • 操作が成功すると、配列の長さが返されます。

  • キーが存在しない場合、-1の値が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

JSON.SET docを実行します。 '{"id": [1,2,3]}' コマンド

サンプルコマンド:

JSON.ARRLEN doc .id

サンプル出力:

(integer) 3

JSON.ARRTRIM

項目

説明

構文

JSON.ARRTRIMキーパス開始停止

時間の複雑さ

O(N)

コマンド説明

TairDocキーのパスで配列をトリミングします。 このコマンドは、開始値と停止値の範囲内にある配列内の要素を保持します。

パラメーター

  • key: このコマンドを実行して管理するキー。

  • path: キー内のパス。

  • start: トリム後に要素が保持される範囲の開始。 パラメータ値は、0以上のインデックス値である。 開始位置の要素は保持されます。

  • stop: トリム後に要素が保持される範囲の終わり。 パラメータ値は、0以上のインデックス値である。 終了位置の要素は保持されます。

Output

  • 操作が成功すると、トリム後の配列の長さが返されます。

  • キーが存在しない場合、-1の値が返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

JSON.SET docを実行します。 '{"id": [1,2,3,4,5,6]}' コマンド

サンプルコマンド:

JSON.ARRTRIM doc .id 3 4

サンプル出力:

(integer) 2

JSONPath

次の表に、TairDocでサポートされているJSONPath構文の要素を示します。

JSONPath要素

説明

¥

ルート要素。

@

現在の要素。

. 名前

子要素。

..

位置が要件を満たす要素。

*

すべての子要素または配列要素を表すことができるワイルドカード。

[ ]

配列のインデックス。 インデックスは0から始まります。 例: [0] 。 この要素では、リストと要素名がサポートされています。 例: [0,1] と ['name'] 。

[start:end: ステップ]

配列スライスセレクタ。 要素は、ステップの増分で開始から終了まで取得されます。 例えば、[0:3:1] は、要素が0番目から3番目まで選択されることを示す。 この例では、インクリメントが − 1の場合、3番目から0番目までの要素が選択される。

?...

フィルターセレクター。

()

( ) > && > | | の優先順位を持つ式をサポートします。 詳細については、「JSONPath」をご参照ください。

  1. 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
  2. ドキュメントを照会します。

    サンプルクエリ:

    ルートセレクター

    # 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"