Utilización de IBM Cloudant Query
En esta guía de aprendizaje, se muestra cómo crear un índice y utilizarlo para consultar la base de datos. También aprenderá a crear diferentes tipos de consultas para encontrar datos con más facilidad.
Aquí ejecutará los mandatos desde la línea de mandatos, pero también puede realizar estas tareas con el panel de control de IBM® Cloudant® for IBM Cloud®, que le proporciona un ejemplo visual de cada tarea. Para obtener más información sobre el panel de control, consulte la guía de aprendizaje Utilización del panel de control de IBM Cloudant
Antes de empezar
Antes de empezar, siga estas guías de aprendizaje para crear una instancia y, a continuación, crear y llenar una base de datos.
- Cree una instancia de IBM Cloudant.
- Cree una base de datos.
- Llene la base de datos.
- (Opcional) Cree un alias de
acurl
.
Si decide no configurar acurl
, utilice el siguiente URL con curl
en lugar del que se proporciona en los ejercicios, curl "https://$USERNAME:$PASSWORD@$ACCOUNT.cloudant.com/databasedemo"
.
El alias acurl
es más seguro. Así se evita que alguien pueda leer su contraseña mientras la escribe. También garantiza que su contraseña no se envía como texto sin formato por la red al imponer el uso de HTTPS.
Ahora, estamos preparados para aprender a ejecutar consultas en la base de datos que ha creado en el paso dos de Antes de empezar.
Creación de un índice
La Consulta de IBM Cloudant utiliza la sintaxis de consulta de estilo Mongo para buscar documentos utilizando operadores lógicos. La Consulta de IBM Cloudant es una combinación de una vista y un índice de búsqueda.
Al utilizar IBM Cloudant Query, el planificador de consultas mira el selector (su consulta) para determinar el índice correcto en el que elegir. En la memoria, filtrará los documentos mediante el selector, lo cual es el motivo por el que, incluso sin un índice, puede seguir realizando consultas con diversos campos.
Si no hay ningún índice definido disponible que coincida con la consulta especificada, IBM Cloudant utiliza el índice _all_docs
, que busca los documentos por ID. En el peor caso, devolverá todos los documentos por ID (exploración
de tabla completa). Las exploraciones de tabla completas son costosas de procesar. Se recomienda crear un índice.
Para crear un índice, siga estos pasos:
-
Copie los siguientes datos JSON de ejemplo en un archivo denominado
query-demo-index.json
:{ "index": { "fields": [ "descriptionField", "temperatureField" ], "partial_filter_selector": { "descriptionField": { "$eq": "hot" }, "temperatureField": { "$gt": 50 } } }, "ddoc": "query-demo-index", "type": "json" }
-
Ejecute el siguiente mandato para crear un índice:
acurl "https://$ACCOUNT.cloudant.com/databasedemo/_index" \ -X POST \ -H "Content-Type: application/json" \ -d \@query-demo-index.json
-
Revise los resultados:
{ "result": "created", "id": "_design/query-demo-index", "name": "490441584f9eddb8d09ef234d636b5f3b18e4ce6" }
No es necesario que cree un índice para ejecutar una consulta. Sin embargo, si no lo hace, verá el siguiente aviso en sus resultados como indicador de que la creación de un índice reduce el proceso y hace que sus consultas sean más efectivas.
"Warning": "No matching index found, create an index to optimize query time."
Ejecución de una consulta sencilla
En este ejemplo se muestra cómo IBM Cloudant Query encuentra documentos que tienen como descriptionField
el valor boiling
.
Para ejecutar la consulta, siga estos pasos:
- Copie el JSON de ejemplo siguiente en un archivo de datos denominado
query1.json
:{ "selector": { "descriptionField": "boiling" } }
- Ejecute el siguiente mandato para consultar la base de datos:
acurl "https://$ACCOUNT.cloudant.com/databasedemo/_find" \ -X POST \ -H "Content-Type: application/json" \ -d \@query1.json
- Revise los resultados de la consulta:
{ "docs": [{ "_id": "91d1fa833d28efe15069604f98de701d", "_rev": "1-f998fc7b89d4466c1e7bb204b1b00f74", "numberField": 1, "nameField": "one", "descriptionField": "boiling", "temperatureField": 100 }], "bookmark": "g1AAAABweJzLYWBgYMpgSmHgKy5JLCrJTq2MT8lPzkzJBYorWBqmGKYlWhgbpxhZpKalGpoamFmaGZikWVqkpJobGKaA9HHA9BGlIwsAmn8eLw", "warning": "No matching index found, create an index to optimize query time." }
A continuación, encontrará un documento en la base de datos utilizando dos campos.
Ejecución de una consulta con dos campos
En este ejemplo se utilizan dos campos para encontrar un documento con los valores: freezing
y -5
.
La búsqueda se describe utilizando una expresión 'selector' que se parece al ejemplo siguiente:
{
"selector": {
"descriptionField": "freezing",
"temperatureField": -5
}
}
Puede adaptar los resultados añadiendo más detalles en la expresión del selector. El parámetro fields
especifica los campos que se deben incluir en los resultados. En nuestro ejemplo, los resultados incluyen nameField
,
descriptionField
y temperatureField
, tal como se muestra en el ejemplo siguiente.
{
...
"fields": [
"nameField",
"descriptionField",
"temperatureField"
]
}
Para ejecutar la consulta, siga estos pasos:
- Copie los datos JSON de ejemplo en un archivo llamado
query2.json
.{ "selector": { "descriptionField": "freezing", "temperatureField": -5 }, "fields": [ "nameField", "descriptionField", "temperatureField" ] }
- Ejecute el siguiente mandato para consultar la base de datos:
acurl "https://$ACCOUNT.cloudant.com/databasedemo/_find" \ -X POST \ -H "Content-Type: application/json" \ -d \@query2.json
- Revise los resultados de la consulta:
{ "docs": [{ "nameField": "eight", "descriptionField": "freezing", "temperatureField": -5 }], "bookmark": "g1AAAABweJzLYWBgYMpgSmHgKy5JLCrJTq2MT8lPzkzJBYorpBiYGJolWaSZmaWYpFqmGBiYmKclphhappqZmRglG5uD9HHA9BGlIwsAms8eJw", "warning": "No matching index found, create an index to optimize query time." }
A continuación, encontrará un documento en la base de datos utilizando varios operadores.
Ejecución de una consulta con operadores
En este ejemplo, se utilizan los operadores $gt
(mayor que) y $eq
(igual) para buscar documentos que incluyen una temperatura superior a 20
grados y una descripción que contiene el valor hot
.
Los resultados incluyen descriptionField
y temperatureField
, que se muestran en orden descendente por temperatura.
Se utiliza una expresión de selector como la del siguiente ejemplo:
{
"selector": {
"temperatureField": {
"$gt": 50
},
"descriptionField": {
"$eq": "hot"
}
},
"fields": [
"descriptionField",
"temperatureField"
],
"sort": [{
"temperatureField": "desc"
}],
"use_index": "_design/query-demo-index"
}
Para ejecutar la consulta, siga estos pasos:
- Copie los siguientes datos JSON de ejemplo en un archivo llamado
query3.json
.{ "selector": { "descriptionField": { "$eq": "hot" }, "temperatureField": { "$gt": 50 } }, "fields": [ "descriptionField", "temperatureField" ], "sort": [{ "temperatureField": "desc" }], "use_index": "_design/query-demo-index" }
- Ejecute esta consulta:
acurl "https://$ACCOUNT.cloudant.com/databasedemo/_find" \ -X POST \ -H "Content-Type: application/json" \ -d \@query3.json
- Revise los resultados de la consulta:
{ "docs": [{ "descriptionField": "hot", "temperatureField": 97 }, { "descriptionField": "hot", "temperatureField": 75 } ], "bookmark": "g1AAAABbeJzLYWBgYMpgSmHgKy5JLCrJTq2MT8lPzkzJBYorJBoYmKWaWVokpZkamJtaGJskm5slmSenGhulWpibJhqC9HHA9OWATErUAGlkzsgvycoCAEsUF_A" }
Ahora ya sabe extraer datos de la base de datos mediante IBM Cloudant Query. Para obtener más información, consulte la Documentación de IBM Cloudant.