KeyConditions (heredado) - Amazon DynamoDB

KeyConditions (heredado)

nota

Le recomendamos que utilice los nuevos parámetros de expresión en lugar de estos parámetros heredados siempre que sea posible. Para obtener más información, consulte Uso de expresiones en DynamoDB. Para obtener información específica sobre el nuevo parámetro que reemplaza a este, Use KeyConditionExpression en su lugar..

El parámetro condicional heredado KeyConditions contiene los criterios de selección de una operación Query. Para ejecutar una consulta en una tabla, solo puede usar condiciones con los atributos de clave principal de la tabla. Debe proporcionar el nombre y valor de la clave de partición como una condición EQ. Si lo desea, puede proporcionar una segunda condición referida a la clave de ordenación.

nota

Si no proporciona una condición de clave de ordenación, se recuperarán todos los elementos que coincidan con la clave de partición. Si hay una expresión FilterExpression o QueryFilter presente, se aplicará después de recuperar los elementos.

Para ejecutar una consulta en un índice, solo puede usar condiciones con los atributos de clave del índice. Debe proporcionar el nombre y valor de la clave de partición del índice como una condición EQ. Si lo desea, puede proporcionar una segunda condición referida a la clave de ordenación del índice.

Cada entrada KeyConditions consta de un nombre de atributo que se va a comparar, junto con lo siguiente:

  • AttributeValueList: uno o más valores que se evaluarán respecto al atributo suministrado. El número de valores de la lista depende del valor de ComparisonOperator que se utilice.

    Para el tipo Number, las comparaciones de los valores son numéricas.

    Las comparaciones de valores String (cadena) de tipo mayor que, igual que o menor que se basan en Unicode con la codificación UTF-8 binaria. Por ejemplo, a es mayor que A y a es mayor que B.

    Al comparar valores de tipo Binary, DynamoDB trata cada byte de los datos binarios como sin signo.

  • ComparisonOperator: comparador que permite evaluar los atributos. Por ejemplo: igual que, mayor que y menor que.

    Para KeyConditions, solo se admiten los siguientes operadores de comparación:

    EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN

    A continuación se indican las descripciones de estos operadores de comparación.

    • EQ: igual que.

      AttributeValueList puede contener un solo AttributeValue de tipo String (cadena), Number (número) o Binary (binario) (no de tipo Set [conjunto]). Si un elemento contiene una entrada AttributeValue de un tipo distinto del especificado en la solicitud, el valor no coincide. Por ejemplo, {"S":"6"} no es igual que {"N":"6"}. {"N":"6"} tampoco es igual que {"NS":["6", "2", "1"]}.

    • LE: menor o igual que.

      AttributeValueList puede contener una sola entrada AttributeValue de tipo String (cadena), Number (número) o Binary (binario) (no de tipo Set [conjunto]). Si un elemento contiene una entrada AttributeValue de un tipo distinto del proporcionado en la solicitud, el valor no coincide. Por ejemplo, {"S":"6"} no es igual que {"N":"6"}. {"N":"6"} tampoco se compara con {"NS":["6", "2", "1"]}.

    • LT : Menor que.

      AttributeValueList puede contener un solo AttributeValue de tipo String (cadena), Number (número) o Binary (binario) (no de tipo Set [conjunto]). Si un elemento contiene una entrada AttributeValue de un tipo distinto del proporcionado en la solicitud, el valor no coincide. Por ejemplo, {"S":"6"} no es igual que {"N":"6"}. {"N":"6"} tampoco se compara con {"NS":["6", "2", "1"]}.

    • GE: mayor o igual que.

      AttributeValueList puede contener una sola entrada AttributeValue de tipo String (cadena), Number (número) o Binary (binario) (no de tipo Set [conjunto]). Si un elemento contiene una entrada AttributeValue de un tipo distinto del proporcionado en la solicitud, el valor no coincide. Por ejemplo, {"S":"6"} no es igual que {"N":"6"}. {"N":"6"} tampoco se compara con {"NS":["6", "2", "1"]}.

    • GT : Mayor que.

      AttributeValueList puede contener una sola entrada AttributeValue de tipo String (cadena), Number (número) o Binary (binario) (no de tipo Set [conjunto]). Si un elemento contiene una entrada AttributeValue de un tipo distinto del proporcionado en la solicitud, el valor no coincide. Por ejemplo, {"S":"6"} no es igual que {"N":"6"}. {"N":"6"} tampoco se compara con {"NS":["6", "2", "1"]}.

    • BEGINS_WITH: comprueba si hay un prefijo.

      AttributeValueList puede contener un solo AttributeValue de tipo String (cadena) o Binary (binario) (no de tipo Number [número] ni Set [conjunto]). El atributo de destino de la comparación debe ser un valor de tipo String o Binary (no de tipo Number ni Set).

    • BETWEEN: mayor o igual que el primer valor y menor o igual que el segundo valor.

      AttributeValueList debe contener dos entradas AttributeValue del mismo tipo, que puede ser String (cadena), Number (número) o Binary (binario) (pero no de tipo Set [conjunto]). Un atributo de destino coincide si el valor de destino es mayor o igual que la primer entrada y menor o igual que la segunda entrada. Si un elemento contiene una entrada AttributeValue de un tipo distinto del proporcionado en la solicitud, el valor no coincide. Por ejemplo, {"S":"6"} no se compara con {"N":"6"}. {"N":"6"} tampoco se compara con {"NS":["6", "2", "1"]}.

Use KeyConditionExpression en su lugar; ejemplo

Supongamos que desea recuperar varios elementos con la misma clave de partición de la tabla Music. Podría usar una solicitud Query con un parámetro KeyConditions como en este ejemplo de la AWS CLI:

aws dynamodb query \ --table-name Music \ --key-conditions '{ "Artist":{ "ComparisonOperator":"EQ", "AttributeValueList": [ {"S": "No One You Know"} ] }, "SongTitle":{ "ComparisonOperator":"BETWEEN", "AttributeValueList": [ {"S": "A"}, {"S": "M"} ] } }'

Puede utilizar KeyConditionExpression en su lugar:

aws dynamodb query \ --table-name Music \ --key-condition-expression 'Artist = :a AND SongTitle BETWEEN :t1 AND :t2' \ --expression-attribute-values '{ ":a": {"S": "No One You Know"}, ":t1": {"S": "A"}, ":t2": {"S": "M"} }'