TairDoc is a document data structure that is similar to RedisJSON. You can use TairDoc to perform create, read, update, and delete (CRUD) operations.
Overview
Features
Fully supports the JSON standard.
Compatible with JSONPath RFC draft-ietf-jsonpath-base version 04.
NoteOnly the JSON.GET command supports this draft version.
Fully supports JSON Pointer.
Stores data in binary trees to simplify the retrieval of child elements.
Supports the conversion from the JSON format to the XML or YAML format.
Release notes
TairDoc is released along with the Tair DRAM-based instance series. TairDoc is compatible with full JSON Pointer syntax and partial JSONPath syntax. Only JSON.GET supports JSONPath syntax.
On May 17, 2022, TairDoc V1.8.4 that fully supports JSONPath syntax for the JSON.GET command was released. We recommend that you update the minor version of your instance to 1.8.4 or later.
TairDoc V1.8.4 also supports specific selectors such as the dot wildcard selector, index selector, and filter selector.
Prerequisites
A Tair DRAM-based instance is created.
The latest minor version provides more features and higher stability. We recommend that you update your instance to the latest minor version. For more information, see Update the minor version of an instance. If your instance is a cluster or read/write splitting instance, we recommend that you update the proxy nodes in the instance to the latest minor version. This ensures that all commands can be run as expected.
Usage notes
The TairDoc data that you want to manage is stored on the Tair DRAM-based instance.
Supported commands
Table 1. TairDoc commands
Command | Syntax | Description |
| Creates a TairDoc key and stores a JSON element at a path in the key. If the key and path already exist, this command updates the element in the path in the key. | |
| Retrieves a JSON element at a path in a TairDoc key. | |
| Deletes a JSON element from a path in a TairDoc key. If the path is not specified, the key is deleted. If the key or path does not exist, this command is ignored. | |
| Retrieves the type of a JSON element at a path in a TairDoc key. Element types include | |
| Merges a JSON value into the JSON data stored at a path in a TairDoc key. This command allows you to perform operations such as adding new values, updating existing values, and deleting values at the specified path. | |
| Increments a JSON value at a path in a TairDoc key by the specified value. The JSON value and the value to increment must be both of the integer or double type. | |
| Appends the json-string value to a JSON value at a path in a TairDoc key. The json-string value and the JSON value must be both of the string type. | |
| Retrieves the string length of a JSON element at a path in a TairDoc key. The JSON element must be of the string type. | |
| Appends one or more JSON elements to an array at a path in a TairDoc key. | |
| Removes and returns the element that matches the specified index in an array at a path in a TairDoc key. | |
| Inserts one or more JSON elements into an array at a path before the specified index in a TairDoc key. | |
| Retrieves the length of an array at a path in a TairDoc key. | |
| Trims an array at a path in a TairDoc key. This command retains the elements in the array that are within the range of the start value and the stop value. | |
| Deletes one or more TairDoc keys. This is a native Redis command. |
The following list describes the conventions for the command syntax used in this topic:
Uppercase keyword
: indicates the command keyword.Italic text
: indicates variables.[options]
: indicates that the enclosed parameters are optional. Parameters that are not enclosed by brackets must be specified.A|B
: indicates that the parameters separated by the vertical bars (|) are mutually exclusive. Only one of the parameters can be specified....
: indicates that the parameter preceding this symbol can be repeatedly specified.
JSON.SET
Parameter | Description |
Syntax |
|
Time complexity | O(N) |
Command description | Creates a TairDoc key and stores a JSON element at a path in the key. If the key and path already exist, this command updates the element in the path in the key. |
Parameter |
|
Output |
|
Example | Sample command:
Sample output:
|
JSON.GET
Parameter | Description |
Syntax |
|
Time complexity | O(N) |
Command description | Retrieves a JSON element at a path in a TairDoc key. |
Parameter |
Note The ROOTNAME and ARRNAME parameters are valid only if the FORMAT parameter is set to XML. |
Output |
|
Example | The Sample command:
Sample output:
|
JSON.DEL
Parameter | Description |
Syntax |
|
Time complexity | O(N) |
Command description | Deletes a JSON element from a path in a TairDoc key. If the path is not specified, the key is deleted. If the key or path does not exist, this command is ignored. |
Parameter |
|
Output |
|
Example | The Sample command:
Sample output:
|
JSON.TYPE
Parameter | Description |
Syntax |
|
Time complexity | O(N) |
Command description | Retrieves the type of a JSON element at a path in a TairDoc key. Element types include |
Parameter |
|
Output |
|
Example | The Sample command:
Sample output:
|
JSON.MERGE
Item | Description |
Syntax |
|
Time complexity | O(N) |
Command description | Merges a JSON value into the JSON data stored at a path in a TairDoc key. This command allows you to perform operations such as adding new values, updating existing values, and deleting values at the specified path. |
Parameter |
|
Output |
|
Example | The Sample command:
Sample output:
|
JSON.NUMINCRBY
Parameter | Description |
Syntax |
|
Time complexity | O(N) |
Command description | Increments a JSON value at a path in a TairDoc key by the specified value. The JSON value and the value to increment must be both of the integer or double type. |
Parameter |
|
Output |
|
Example | The Sample command:
Sample output:
|
JSON.STRAPPEND
Parameter | Description |
Syntax |
|
Time complexity | O(N) |
Command description | Appends the json-string value to a JSON value at a path in a TairDoc key. The json-string value and the JSON value must be both of the string type. |
Parameter |
|
Output |
|
Example | The Sample command:
Sample output:
|
JSON.STRLEN
Parameter | Description |
Syntax |
|
Time complexity | O(N) |
Command description | Retrieves the string length of a JSON element at a path in a TairDoc key. The JSON element must be of the string type. |
Parameter |
|
Output |
|
Example | The Sample command:
Sample output:
|
JSON.ARRAPPEND
Parameter | Description |
Syntax |
|
Time complexity | O(M×N), where M specifies the number of JSON elements that you want to append and N specifies the number of elements in the array. |
Command description | Appends one or more JSON elements to an array at a path in a TairDoc key. |
Parameter |
|
Output |
|
Example | The Sample command:
Sample output:
|
JSON.ARRPOP
Parameter | Description |
Syntax |
|
Time complexity | O(M×N), where M specifies the number of child elements in the key and N specifies the number of elements in the array. |
Command description | Removes and returns the element that matches the specified index in an array at a path in a TairDoc key. |
Parameter |
|
Output |
|
Example | The Sample command:
Sample output:
|
JSON.ARRINSERT
Parameter | Description |
Syntax |
|
Time complexity | O(M×N), where M specifies the number of JSON elements that you want to insert and N specifies the number of elements in the array. |
Command description | Inserts one or more JSON elements into an array at a path before the specified index in a TairDoc key. |
Parameter |
|
Output |
|
Example | The Sample command:
Sample output:
|
JSON.ARRLEN
Parameter | Description |
Syntax |
|
Time complexity | O(N) |
Command description | Retrieves the length of an array at a path in a TairDoc key. |
Parameter |
|
Output |
|
Example | The Sample command:
Sample output:
|
JSON.ARRTRIM
Parameter | Description |
Syntax |
|
Time complexity | O(N) |
Command description | Trims an array at a path in a TairDoc key. This command retains the elements in the array that are within the range of the start value and the stop value. |
Parameter |
|
Output |
|
Example | The Sample command:
Sample output:
|
JSONPath
The following table describes the elements of JSONPath syntax supported by TairDoc.
JSONPath element | Description |
$ | The root element. |
@ | The current element. |
.name | A child element. |
.. | An element whose position meets the requirements. |
* | A wildcard that can represent all child elements or array elements. |
[ ] | The index of arrays. The index starts from 0. Example: [0]. Lists and element names are supported for this element. Example: [0,1] and ['name']. |
[start:end:step] | The array slice selector. Elements are obtained from start to end in increments of step. For example, [0:3:1] indicates that elements are selected from the zeroth one to the third one. In this example, if the increment is -1, elements are selected from the third one to the zeroth one. |
?... | The filter selector. |
() | Supports expressions with the priority sequence of |
Examples
Create a JSON document.
Sample command:
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 }'
Expected output:
OK
Query the document.
Sample queries:
Root Selector
# 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}}}]"
Dot Selector
# 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]"
Index Selector
# 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"]"
Array Slice Selector
# 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}]"
Descendant Selector
# 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]"
List Selector
# # 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}]"
Filter Selector
# 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 supports full JSONPointer syntax. For more information, see JavaScript Object Notation (JSON) Pointer.
The following code shows an example:
The JSON.SET doc . '{"foo": "bar", "baz" : [1,2,3]}'
command is run in advance.
Sample command:
# Obtain the first value of the .baz element in doc.
JSON.GET doc /baz/0
Sample output:
"1"