Todos los productos
Search
Centro de documentos

Tair (Redis® OSS-Compatible):Doc

Última actualización: Sep 03, 2026

TairDoc es una estructura de datos de documentos similar a RedisJSON. Úsela para almacenar, consultar y manipular documentos JSON con compatibilidad completa para operaciones CRUD.

Características principales:

  • Compatibilidad total con el estándar JSON

  • Compatibilidad con JSONPath (borrador RFC-4) mediante JSON.GET; los selectores específicos, como el comodín de punto, el índice y los filtros, requieren la versión 1.8.4 o posterior

  • Compatibilidad completa con la sintaxis de JSON Pointer (RFC 6901)

  • Almacenamiento en árbol binario para recuperar elementos secundarios de forma eficiente

  • Conversión de JSON a XML y de JSON a YAML mediante JSON.GET

Notas de la versión:

  1. TairDoc se lanzó junto con las instancias optimizadas para memoria de Tair. Admite la sintaxis completa de JSONPointer y una sintaxis parcial de JSONPath (solo JSON.GET admite la sintaxis JSONPath).

  2. El 17 de mayo de 2022 se publicó TairDoc V1.8.4 con compatibilidad total de JSONPath para JSON.GET, incluido el selector de comodín de punto, el selector de índice y el selector de filtro. Se recomienda actualizar la versión secundaria de su instancia a la 1.8.4 o posterior.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Una instancia basada en DRAM de Tair

  • Versión secundaria de la instancia 1.8.4 o posterior (obligatoria para la compatibilidad total con JSONPath mediante JSON.GET)

Para actualizar su instancia a la última versión secundaria, consulte Actualizar la versión secundaria de una instancia.

En instancias de clúster o con división de lectura/escritura, actualice los nodos de proxy a la última versión secundaria para garantizar que todos los comandos funcionen correctamente.

Lista de comandos

Comando

Descripción

Complejidad temporal

JSON.SET

Cree una clave de TairDoc o actualice un elemento JSON en una ruta

O(N)

JSON.GET

Recupere un elemento JSON de una ruta

O(N)

JSON.DEL

Elimine un elemento JSON o una clave

O(N)

JSON.TYPE

Obtenga el tipo de un elemento JSON

O(N)

JSON.MERGE

Combine un valor JSON en una ruta

O(N)

JSON.NUMINCRBY

Incremente un elemento JSON numérico

O(N)

JSON.STRAPPEND

Agregue una cadena al final de un elemento de cadena JSON

O(N)

JSON.STRLEN

Obtenga la longitud de un elemento de cadena JSON

O(N)

JSON.ARRAPPEND

Agregue elementos al final de un arreglo

O(M×N)

JSON.ARRPOP

Extraiga y devuelva un elemento de un arreglo

O(M×N)

JSON.ARRINSERT

Inserte elementos antes de un índice dado en un arreglo

O(M×N)

JSON.ARRLEN

Obtenga la longitud de un arreglo

O(N)

JSON.ARRTRIM

Recorte un arreglo a un rango especificado

O(N)

DEL

Elimine una o más claves de TairDoc (comando nativo de Redis)

—

Convenciones de sintaxis utilizadas en esta referencia:

  • MAYÚSCULAS: palabra clave del comando

  • _cursiva_: variable

  • [opción]: parámetro opcional

  • A | B: opciones mutuamente excluyentes

  • ...: el parámetro se puede repetir

JSON.SET

Sintaxis: JSON.SET key path json [NX | XX]

Crea una clave de TairDoc y almacena un elemento JSON en la ruta especificada. Si la clave y la ruta ya existen, actualiza el elemento.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta dentro de la clave. Use . o $ para la raíz

json

El elemento JSON que se va a almacenar

NX

Escriba solo si la ruta no existe

XX

Escriba solo si la ruta ya existe

Valores de retorno:

Resultado

Valor de retorno

Correcto

OK

Se especificó XX pero la ruta no existe

nil

Se especificó NX pero la ruta ya existe

nil

Ruta no válida

ERR could not find object to add, please check path

Ejemplo: crear un documento JSON:

El siguiente comando crea una clave doc en la ruta raíz ($) y almacena un documento de librería con cuatro libros y una bicicleta:

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 } } }'

Salida esperada:

OK

JSON.GET

Sintaxis: JSON.GET key path [FORMAT XML | YAML] [ROOTNAME root] [ARRNAME arr]

Recupera el elemento JSON en la ruta especificada. Admite tanto la sintaxis JSONPath como JSON Pointer.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta dentro de la clave. Acepta sintaxis JSONPath (estilo $) y JSON Pointer (estilo .)

FORMAT

Formato de salida: XML o YAML. Si se omite, devuelve JSON

ROOTNAME

Nombre de etiqueta para el elemento raíz en la salida XML. Válido solo cuando se establece FORMAT XML

ARRNAME

Nombre de etiqueta para los elementos del arreglo en la salida XML. Válido solo cuando se establece FORMAT XML

Valores de retorno:

Resultado

Valor de retorno

Correcto

El elemento JSON en la ruta especificada

Error

Mensaje de error

Ejemplo: recuperar un documento como XML:

Primero, cree el documento:

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Luego, recupérelo como XML y especifique ROOT como nombre de la etiqueta raíz y ARR como nombre de la etiqueta del arreglo:

JSON.GET doc . FORMAT XML ROOTNAME ROOT ARRNAME ARR

Salida esperada:

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

JSON.DEL

Sintaxis: JSON.DEL key path

Elimina el elemento JSON en la ruta especificada. Si no se proporciona ninguna ruta, elimina toda la clave. No realiza ninguna acción si la clave o la ruta no existen.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta del elemento que se va a eliminar. Si se omite, se elimina toda la clave

Valores de retorno:

Resultado

Valor de retorno

Correcto

1

Clave o ruta no encontrada

0

Ejemplo: eliminar un campo:

Primero, cree el documento:

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Elimine el campo foo:

JSON.DEL doc .foo

Salida esperada: 1 indica que el elemento se eliminó:

(integer) 1

JSON.TYPE

Sintaxis: JSON.TYPE key path

Devuelve el tipo del elemento JSON en la ruta especificada.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta del elemento

Valores de retorno:

Resultado

Valor de retorno

Correcto

Uno de los siguientes: boolean, string, number, array, object, raw, reference, const, null

Con errores

0

Clave o ruta no encontrada

nil

Ejemplo: obtener el tipo de un campo:

Primero, cree el documento:

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Obtenga el tipo del campo foo ("bar" es una cadena):

JSON.TYPE doc .foo

Salida esperada:

string

JSON.MERGE

Sintaxis: JSON.MERGE key path value

Combina un valor JSON en la ruta especificada. Permite agregar nuevos valores, actualizar valores existentes y eliminar valores en la ruta indicada.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta donde se combinarán los datos. Admite sintaxis parcial de JSONPath (por ejemplo, $.a.b.c, $.a['b']). No admite descenso recursivo ($..) ni expresiones de comodín ($*)

value

El valor JSON que se va a combinar. Compatible con JSON Merge Patch (RFC 7386)

Valores de retorno:

Resultado

Valor de retorno

Correcto

OK

Valor no válido

Error (falló el análisis sintáctico del parche de combinación)

Ejemplo: agregar, actualizar y eliminar valores en una sola operación:

Primero, cree el documento:

JSON.SET doc $ '{"f1": {"a":1}, "f2":{"a":2}}'

Combine los cambios: establezca f1 en null (lo elimina), actualice f2.a y agregue f2.b, además de añadir un nuevo arreglo f3:

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

Salida esperada:

OK

Compruebe el resultado con JSON.GET doc .. La clave f1 se elimina porque establecer un campo en null dentro de un parche de combinación lo borra:

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

JSON.NUMINCRBY

Sintaxis: JSON.NUMINCRBY key path value

Incrementa el elemento JSON numérico en la ruta especificada. Tanto el elemento existente como el valor de incremento deben ser del mismo tipo: entero o doble.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta del elemento numérico

value

La cantidad que se va a sumar

Valores de retorno:

Resultado

Valor de retorno

Correcto

El nuevo valor después del incremento

Clave o ruta no encontrada

Error

Ejemplo: incrementar un campo numérico:

Primero, cree el documento:

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Incremente baz en 10 (42 + 10 = 52):

JSON.NUMINCRBY doc .baz 10

Salida esperada:

"52"

JSON.STRAPPEND

Sintaxis: JSON.STRAPPEND key path json-string

Agrega una cadena al final del elemento de cadena JSON en la ruta especificada. Tanto el elemento existente como el valor agregado deben ser del tipo string.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta del elemento de cadena

json-string

La cadena que se va a agregar

Valores de retorno:

Resultado

Valor de retorno

Correcto

La nueva longitud de la cadena

Clave no encontrada

-1

Ejemplo: agregar texto a un campo de cadena:

Primero, cree el documento:

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Agregue rrrrr a foo: "bar" se convierte en "barrrrrr", que tiene 8 caracteres:

JSON.STRAPPEND doc .foo rrrrr

Salida esperada:

(integer) 8

JSON.STRLEN

Sintaxis: JSON.STRLEN key path

Devuelve la longitud en caracteres del elemento de cadena JSON en la ruta especificada. El elemento debe ser del tipo string.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta del elemento de cadena

Valores de retorno:

Resultado

Valor de retorno

Correcto

Longitud de la cadena

Clave no encontrada

-1

Ejemplo: obtener la longitud de un campo de cadena:

Primero, cree el documento:

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Obtenga la longitud de foo: "bar" tiene 3 caracteres:

JSON.STRLEN doc .foo

Salida esperada:

(integer) 3

JSON.ARRAPPEND

Sintaxis: JSON.ARRAPPEND key path json [json ...]

Agrega uno o más elementos JSON al final de un arreglo. La complejidad temporal es O(M×N), donde M es el número de elementos por agregar y N es la longitud actual del arreglo.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta del arreglo

json

Uno o más elementos JSON que se van a agregar

Valores de retorno:

Resultado

Valor de retorno

Correcto

La nueva longitud del arreglo

Clave no encontrada

-1

Ejemplo: agregar varios elementos a un arreglo:

Primero, cree el documento:

JSON.SET doc . '{"id": [1,2,3]}'

Agregue null, false y true al arreglo id. El arreglo pasa de 3 a 6 elementos:

JSON.ARRAPPEND doc .id null false true

Salida esperada:

(integer) 6

JSON.ARRPOP

Sintaxis: JSON.ARRPOP key path [index]

Extrae y devuelve el elemento en el índice especificado de un arreglo. La complejidad temporal es O(M×N), donde M es el número de elementos secundarios en la clave y N es la longitud del arreglo.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta del arreglo

index

Índice del elemento que se va a extraer. Comienza en 0; los valores negativos cuentan desde el final. Si se omite, toma el último elemento de forma predeterminada

Valores de retorno:

Resultado

Valor de retorno

Correcto

El elemento extraído

El arreglo está vacío

ERR array index outflow

Ejemplo: extraer el primer elemento de un arreglo:

Primero, cree el documento:

JSON.SET doc . '{"id": [1,2,3]}'

Extraiga y devuelva el elemento en el índice 0 (el primer elemento, 1):

JSON.ARRPOP doc .id 0

Salida esperada:

"1"

JSON.ARRINSERT

Sintaxis: JSON.ARRINSERT key path [index] json [json ...]

Inserta uno o más elementos JSON en un arreglo antes del índice especificado. La complejidad temporal es O(M×N), donde M es el número de elementos por insertar y N es la longitud actual del arreglo.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta del arreglo

index

Posición antes de la cual se insertarán los elementos. Comienza en 0; los valores negativos cuentan desde el final. Si se omite, toma la última posición de forma predeterminada

json

Uno o más elementos JSON que se van a insertar

Valores de retorno:

Resultado

Valor de retorno

Correcto

La nueva longitud del arreglo

El arreglo está vacío

ERR array index outflow

Ejemplo: insertar elementos al inicio de un arreglo:

Primero, cree el documento:

JSON.SET doc . '{"id": [1,2,3]}'

Inserte 10 y 15 antes del índice 0. El arreglo resultante es [10, 15, 1, 2, 3]:

JSON.ARRINSERT doc .id 0 10 15

Salida esperada:

(integer) 5

JSON.ARRLEN

Sintaxis: JSON.ARRLEN key path

Devuelve el número de elementos en un arreglo.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta del arreglo

Valores de retorno:

Resultado

Valor de retorno

Correcto

Longitud del arreglo

Clave no encontrada

-1

Ejemplo: obtener la longitud de un arreglo:

Primero, cree el documento:

JSON.SET doc . '{"id": [1,2,3]}'

Obtenga el número de elementos en el arreglo id:

JSON.ARRLEN doc .id

Salida esperada:

(integer) 3

JSON.ARRTRIM

Sintaxis: JSON.ARRTRIM key path start stop

Recorta un arreglo para que solo permanezcan los elementos dentro del rango [start, stop] (inclusive). Todos los elementos fuera de este rango se eliminan.

Parámetros:

Parámetro

Descripción

key

La clave de TairDoc

path

Ruta del arreglo

start

Índice inicial (base 0, inclusivo)

stop

Índice final (base 0, inclusivo)

Valores de retorno:

Resultado

Valor de retorno

Correcto

Longitud del arreglo después del recorte

Clave no encontrada

-1

Ejemplo: recortar un arreglo a un subrango:

Primero, cree el documento:

JSON.SET doc . '{"id": [1,2,3,4,5,6]}'

Recorte el arreglo para conservar solo los elementos en los índices 3 y 4 (valores 4 y 5). Los elementos fuera de este rango se descartan:

JSON.ARRTRIM doc .id 3 4

Salida esperada: permanecen 2 elementos:

(integer) 2

JSONPath

JSON.GET admite la sintaxis del borrador RFC-4 de JSONPath para realizar consultas flexibles. La compatibilidad total con JSONPath requiere la versión 1.8.4 o posterior.

Selectores admitidos:

Selector

Descripción

$

Elemento raíz

@

Elemento actual

.name

Elemento secundario

..

Elementos descendientes

*

Comodín: todos los elementos secundarios o del arreglo

[ ]

Índice de arreglo (base 0); admite listas ([0,1]) y nombres de elementos (['name'])

[start:end:step]

Selector de segmento de arreglo

?...

Selector de filtro

()

Expresión; prioridad de operadores: `( ) > && >

`

Ejemplos de consultas:

Los siguientes ejemplos utilizan este documento de librería. Créelo primero:

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
}'

Salida esperada:

OK

Selector de raíz

Consulte todo el objeto JSON:

JSON.GET dockey $

Salida esperada:

"[{"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}}}]"

Selector de punto

Consulte todos los campos de la bicicleta:

JSON.GET dockey $.store.bicycle.*

Salida esperada:

"["red",19.95]"

Consulte el precio de la bicicleta:

JSON.GET dockey $.store.bicycle.price

Salida esperada:

"[19.95]"

Selector de índice

Consulte todos los campos del primer libro:

JSON.GET dockey $.store.book[0]

Salida esperada:

"[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95}]"

Consulte los títulos de todos los libros:

JSON.GET dockey "$.store.book[*]['title']"

Salida esperada:

"["Sayings of the Century","Sword of Honour","Moby Dick","The Lord of the Rings"]"

Selector de segmento de arreglo

Consulte los primeros tres libros mediante un segmento con paso de 1:

JSON.GET dockey $.store.book[0:2:1]

Salida esperada:

"[{"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}]"

Selector de descendientes

Consulte todos los precios en la tienda (tanto libros como bicicleta):

JSON.GET dockey $..price

Salida esperada:

"[8.95,12.99,8.99,22.99,19.95]"

Selector de lista

Consulte el primer y tercer libro:

JSON.GET dockey $.store.book[0,2]

Salida esperada:

"[{"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}]"

Selector de filtro

Consulte los libros que tienen un campo isbn:

JSON.GET dockey $.store.book[?(@.isbn)]

Salida esperada:

"[{"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}]"

Consulte los libros con precio menor a 10:

JSON.GET dockey '$.store.book[?(@.price < 10)]'

Salida esperada:

"[{"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}]"

Consulte los libros con precio de 12.99, precio superior a 19.95 o de la categoría reference (expresión combinada):

JSON.GET dockey "$..book[?((@.price == 12.99 || @.price > $.store.bicycle.price) || @.category == 'reference')]"

Salida esperada:

"[{"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}]"

JSON Pointer

TairDoc admite completamente la sintaxis de JSON Pointer (RFC 6901). Utilice rutas delimitadas por / para navegar dentro de un documento.

Ejemplo: recuperar un elemento anidado de un arreglo:

Primero, cree el documento:

JSON.SET doc . '{"foo": "bar", "baz" : [1,2,3]}'

Recupere el primer elemento del arreglo baz mediante la ruta JSON Pointer /baz/0:

JSON.GET doc /baz/0

Salida esperada:

"1"