Amazon DynamoDB
Guía para desarrolladores (Versión de API 2012-08-10)

Paso 4: Consultar y examinar los datos

Puede utilizar el método query para recuperar datos de una tabla. Debe especificar un valor de clave de partición; la clave de ordenación es opcional.

La clave principal de la tabla Movies consta de:

  • year: clave de partición. El tipo de atributo es Number. 

  • title: clave de ordenación. El tipo de atributo es String.

Para buscar todas las películas estrenadas durante un año, solo debe especificar el valor de year. También puede indicar el valor de title si desea recuperar un subconjunto de películas basadas en una condición determinada (la clave de ordenación). Por ejemplo, puede encontrar las películas estrenadas en 2014 cuyo título comienza por la "A".

Además del método query, puede usar también el método scan que puede recuperar todos los datos de la tabla.

Para obtener más información sobre cómo consultar y examinar datos, consulte Uso de consultas en DynamoDB y Uso de operaciones de examen en DynamoDB, respectivamente.

Paso 4.1: Consulta de todas las películas estrenadas durante un año

El programa incluido en este paso recupera todas las películas estrenadas en el año (year) 1985.

  1. Copie el siguiente programa y péguelo en un archivo llamado MoviesQuery01.js.

    /** * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * This file is licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. A copy of * the License is located at * * http://aws.amazon.com/apache2.0/ * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ var AWS = require("aws-sdk"); AWS.config.update({ region: "us-west-2", endpoint: "http://localhost:8000" }); var docClient = new AWS.DynamoDB.DocumentClient(); console.log("Querying for movies from 1985."); var params = { TableName : "Movies", KeyConditionExpression: "#yr = :yyyy", ExpressionAttributeNames:{ "#yr": "year" }, ExpressionAttributeValues: { ":yyyy": 1985 } }; docClient.query(params, function(err, data) { if (err) { console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); } else { console.log("Query succeeded."); data.Items.forEach(function(item) { console.log(" -", item.year + ": " + item.title); }); } });

    nota

    ExpressionAttributeNames permite sustituir nombres. Esto se usa porque year es una palabra reservada en Amazon DynamoDB. No se puede usar directamente en ninguna expresión, incluida KeyConditionExpression. Para solucionar este problema se utiliza el nombre de atributo de expresión #yr.

    ExpressionAttributeValues permite sustituir valores. Se utiliza porque no se pueden utilizar literales en ninguna una expresión, lo que incluye KeyConditionExpression. Para solucionar este problema se utiliza el valor de atributo de expresión :yyyy.

  2. Para ejecutar el programa, introduzca el siguiente comando.

    node MoviesQuery01.js

nota

El programa anterior muestra cómo consultar una tabla según sus atributos de clave principal. En DynamoDB, puede crear si lo desea uno o varios índices secundarios en una tabla y consultarlos de la misma forma que se consulta una tabla. Los índices secundarios ofrecen a las aplicaciones mayor flexibilidad, porque permiten consultar atributos sin clave. Para obtener más información, consulte Uso de índices secundarios para mejorar el acceso a los datos.

Paso 4.2: Consulta de todas las películas estrenadas durante un año con unos títulos determinados

El programa incluido en este paso recupera todas las películas estrenadas el año (year) 1992, cuyo título (title) comienza por las letras de la "A" a la "L".

  1. Copie el siguiente programa y péguelo en un archivo llamado MoviesQuery02.js.

    /** * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * This file is licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. A copy of * the License is located at * * http://aws.amazon.com/apache2.0/ * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ var AWS = require("aws-sdk"); AWS.config.update({ region: "us-west-2", endpoint: "http://localhost:8000" }); var docClient = new AWS.DynamoDB.DocumentClient(); console.log("Querying for movies from 1992 - titles A-L, with genres and lead actor"); var params = { TableName : "Movies", ProjectionExpression:"#yr, title, info.genres, info.actors[0]", KeyConditionExpression: "#yr = :yyyy and title between :letter1 and :letter2", ExpressionAttributeNames:{ "#yr": "year" }, ExpressionAttributeValues: { ":yyyy": 1992, ":letter1": "A", ":letter2": "L" } }; docClient.query(params, function(err, data) { if (err) { console.log("Unable to query. Error:", JSON.stringify(err, null, 2)); } else { console.log("Query succeeded."); data.Items.forEach(function(item) { console.log(" -", item.year + ": " + item.title + " ... " + item.info.genres + " ... " + item.info.actors[0]); }); } });
  2. Para ejecutar el programa, introduzca el siguiente comando.

    node MoviesQuery02.js

Paso 4.3: Examinar

El método scan lee cada uno de los elementos de la tabla y devuelve todos los datos de la tabla. Puede proporcionar una expresión filter_expression opcional para que solamente se devuelvan los elementos que coinciden con los criterios. No obstante, el filtro solo se aplica después de haber examinado toda la tabla.

El programa siguiente examina la tabla Movies en su totalidad, que contiene aproximadamente 5000 elementos. El examen especifica el filtro opcional que permite recuperar solamente las películas de la década de 1950 (aproximadamente 100 elementos) y descartar todas las demás.

  1. Copie el siguiente programa y péguelo en un archivo llamado MoviesScan.js.

    /** * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * This file is licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. A copy of * the License is located at * * http://aws.amazon.com/apache2.0/ * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ var AWS = require("aws-sdk"); AWS.config.update({ region: "us-west-2", endpoint: "http://localhost:8000" }); var docClient = new AWS.DynamoDB.DocumentClient(); var params = { TableName: "Movies", ProjectionExpression: "#yr, title, info.rating", FilterExpression: "#yr between :start_yr and :end_yr", ExpressionAttributeNames: { "#yr": "year", }, ExpressionAttributeValues: { ":start_yr": 1950, ":end_yr": 1959 } }; console.log("Scanning Movies table."); docClient.scan(params, onScan); function onScan(err, data) { if (err) { console.error("Unable to scan the table. Error JSON:", JSON.stringify(err, null, 2)); } else { // print all the movies console.log("Scan succeeded."); data.Items.forEach(function(movie) { console.log( movie.year + ": ", movie.title, "- rating:", movie.info.rating); }); // continue scanning if we have more movies, because // scan can retrieve a maximum of 1MB of data if (typeof data.LastEvaluatedKey != "undefined") { console.log("Scanning for more..."); params.ExclusiveStartKey = data.LastEvaluatedKey; docClient.scan(params, onScan); } } }

    En el código, observe lo siguiente:

    • ProjectionExpression especifica los atributos que se desea obtener en el resultado del examen.

    • FilterExpression especifica una condición que devuelve solamente los elementos que cumplen la condición. Todos los demás elementos se descartan.

  2. Para ejecutar el programa, introduzca el siguiente comando.

    node MoviesScan.js

nota

También puede usar la operación Scan con cualesquiera índices secundarios que ha creado en la tabla. Para obtener más información, consulte Uso de índices secundarios para mejorar el acceso a los datos.