Sintaxe do seletor de consulta

A linguagem do IBM Cloudant Query é expressa como um objeto JSON que descreve documentos de interesse. Dentro dessa estrutura, é possível aplicar a lógica condicional usando campos especialmente nomeados.

A linguagem do IBM Cloudant Query tem algumas semelhanças com os documentos de consulta do MongoDB, mas essas semelhanças são provenientes de um compartilhamento de propósitos e não abrangem necessariamente a equivalência de função ou resultado.

Básicos do seletor

A sintaxe do seletor elementar requer que você especifique um ou mais campos e os valores correspondentes necessários para esses campos. O seletor de exemplo a seguir corresponde a todos os documentos que têm um campo director com o valor Lars von Trier.

Veja o exemplo a seguir de um seletor simples:

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

Se você tiver criado um índice de texto completo especificando "type":"text" na criação dele, será possível usar o operador $text para selecionar documentos correspondentes. No exemplo a seguir, o índice de texto completo é inspecionado para localizar qualquer documento que contenha a palavra Bond.

Veja o exemplo a seguir de um seletor simples para um índice full_text:

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

É possível criar expressões de seletor mais complexas combinando operadores. No entanto, para índices do IBM Cloudant Query do tipo json, não é possível usar operadores de "combinação" ou "matriz lógica", como $regex, como a base de uma consulta. Somente os operadores de igualdade, como $eq, $gt, $gte, $lt, e $lte- mas não $ne- podem ser usados como base de uma consulta mais complexa. Para obter mais informações sobre a criação de expressões de seletor mais complexas, consulte Criando expressões de seletor.

Seletor com dois campos

No exemplo a seguir, o seletor corresponde a qualquer documento que tenha um campo name com Paul e um campo location com o valor "Boston".

Veja o exemplo a seguir de um seletor mais complexo:

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

Subcampos

Use um seletor mais complexo para especificar os valores para um campo de objetos aninhados, ou subcampos. Por exemplo, é possível usar uma estrutura JSON padrão para a especificação de um campo e de um subcampo.

Veja o exemplo a seguir de um seletor de campo e subcampo dentro de um objeto JSON:

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

Um equivalente abreviado usa uma notação de ponto para combinar os nomes de campo e de subcampo em um único nome.

Veja o exemplo a seguir de um seletor de campo e subcampo equivalente que usa notação de ponto:

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

Criação de expressões de seletor mais complexas

Em geral, sempre que você tem um operador que usa um argumento, esse argumento em si pode ser outro operador com argumentos próprios. Essa expansão permite expressões de seletor mais complexas.

Os operadores lógicos de combinação ou de matriz, como $regex, podem levar a uma varredura integral do banco de dados quando você usa índices do tipo JSON, resultando em um desempenho ruim. Somente operadores de igualdade, como $eq, $gt, $gte, $lt, e $lte (mas não $ne), habilite as pesquisas de índice. Para assegurar que os índices sejam usados efetivamente, analise o plano de explicação para cada consulta.

A maioria das expressões de seletor funciona exatamente como esperado para o operador. Os algoritmos de correspondência usados pelo operador $regex são atualmente baseados na na biblioteca Perl Compatible Regular Expression(PCRE). No entanto, nem toda a biblioteca PCRE é implementada. Além disso, algumas partes do operador $regex vão além do que a PCRE oferece. Para obter mais informações sobre o que é implementado, consulte as informações sobre Expressão regular de Erlang.

Usando o operador $text

O operador $text é baseado em uma procura do Lucene com um analisador padrão. O operador não faz distinção entre maiúsculas e minúsculas e corresponde a quaisquer palavras. No entanto, o operador $text não suporta a sintaxe completa do Lucene, como curingas, correspondências difusas ou detecção de proximidade.

Para obter mais informações, consulte a Documentação de procura. O operador $text aplica-se a todas as sequências localizadas no documento. Se você colocar esse operador no contexto de um nome de campo, ele será inválido.