Sintaxis del selector de consulta

El lenguaje IBM Cloudant Query se expresa como un objeto JSON que describe documentos de interés. Dentro de esta estructura, puede aplicar lógica condicional utilizando campos denominados especialmente.

El lenguaje IBM Cloudant Query tiene algunas similitudes con los documentos de consulta de MongoDB, pero estas similitudes surgen de una finalidad común y no se aplican necesariamente a la equivalencia de función o resultado.

Conceptos básicos sobre el selector

La sintaxis básica del selector requiere que especifique uno o varios campos y los valores correspondientes necesarios para dichos campos. El siguiente selector de ejemplo coincide con todos los documentos que tienen un campo director que contiene el valor Lars von Trier.

Consulte el ejemplo siguiente de un selector simple:

{
	"selector": {
		"director": "Lars von Trier"
	}
}

Si ha creado un índice de texto completo especificando "type":"text" cuando se haya creado el índice, puede utilizar el operador $text para seleccionar documentos coincidentes. En el ejemplo siguiente, se inspecciona el índice de texto completo para encontrar cualquier documento que contenga la palabra Bond.

Consulte el ejemplo siguiente de un selector simple para un índice full_text:

{
	"selector": {
		"$text": "Bond"
	}
}

Puede crear expresiones de selector más complejas combinando operadores. Sin embargo, para los índices de IBM Cloudant Query de tipo json, no puede utilizar operadores de "combinación" o de "lógica de matriz" como $regex como base de una consulta. Sólo los operadores de igualdad como $eq, $gt, $gte, $lt, y $lte-pero no $ne- pueden utilizarse como base de una consulta más compleja. Para obtener más información sobre cómo crear expresiones de selector complejas, consulte Creación de expresiones de selector.

Selector con dos campos

En el ejemplo siguiente, el selector coincide con cualquier documento con un campo name que contenga Paul y que también tenga un campo location con el valor "Boston".

Consulte el ejemplo siguiente de un selector más complejo:

{
	"selector": {
		"name": "Paul",
		"location": "Boston"
	}
}

Subcampos

Utilice un selector más complejo para especificar los valores para un campo de objetos anidados o subcampos. Por ejemplo, puede utilizar una estructura JSON estándar para especificar un campo y un subcampo.

Consulte el ejemplo siguiente de un selector de campo y subcampo dentro de un objeto JSON:

{
	"selector": {
		"imdb": {
			"rating": 8
		}
	}
}

Un equivalente abreviado utiliza una notación de puntos para combinar los nombres de campo y subcampo en un solo nombre.

Consulte el ejemplo siguiente de un campo equivalente y un selector de subcampo que utiliza notación de puntos:

{
	"selector": {
		"imdb.rating": 8
	}
}

Creación de expresiones de selección más complejas

En general, siempre que tenga un operador que adopte un argumento, ese argumento puede ser otro operador con argumentos propios. Esta ampliación permite expresiones de selector más complejas.

Los operadores lógicos de combinación o de matriz, como por ejemplo $regex, pueden dar como resultado una exploración de base de datos completa cuando se utilizan índices de tipo JSON, lo que da lugar a un rendimiento deficiente. Sólo los operadores de igualdad, como $eq, $gt, $gte, $lt, y $lte (pero no $ne), habilitan las búsquedas de índices. Para asegurarse de que los índices se utilizan de forma eficaz, analice el plan de explicación para cada consulta.

La mayoría de las expresiones de selector funcionan exactamente como se espera que lo haga el operador. Los algoritmos de concordancia que utiliza el operador $regex se basan actualmente en la biblioteca Perl Compatible Regular Expression(PCRE). Sin embargo, no se implementa toda la biblioteca de PCRE. Además, algunas partes del operador $regex van más allá de lo que ofrece PCRE. Para más información sobre lo que se implementa consulte la información sobre Expresiones Regulares Erlang.

Utilización del operador $text

El operador $text se basa en una búsqueda de Lucene con un analizador estándar. El operador no distingue entre mayúsculas y minúsculas y coincide con cualquier palabra. Sin embargo, el operador $text no admite la sintaxis completa de Lucene, como caracteres comodín, coincidencias aproximadas o detección de proximidad.

Para obtener más información, consulte la documentación de búsqueda. El operador $text se aplica a todas las series que se encuentran en el documento. Si coloca este operador en el contexto de un nombre de campo, no es válido.