Ir al contenido principal

Reglas de filtrado

Los permisos, la validación y el parámetro filter de la API se basan en una estructura JSON específica para definir sus reglas. En esta página se describe la sintaxis para crear reglas de filtro planas, relacionales o complejas.

Sintaxis

  • Campo: cualquier campo raíz, campo relacional u operador lógico válido
  • Operador: cualquier operador de filtro válido
  • Valor: cualquier valor estático válido o variable dinámica
{
	<field>: {
		<operator>: <value>
	}
}

Ejemplos

{
	"title": {
		"_contains": "Catalogo"
	}
}
{
	"owner": {
		"_eq": "$CURRENT_USER"
	}
}
{
	"datetime": {
		"_lte": "$NOW"
	}
}
{
	"category": {
		"_null": true
	}
}

Operadores de filtro

Nombre del operador (en la aplicación)OperadorDescripción
Igual a_eqIgual a
No es igual a_neqNo es igual a
Menor que_ltMenor que
Menor o igual que_lteMenor o igual que
Mayor que_gtMayor que
Mayor o igual que_gteMayor o igual que
Es uno de los_inCoincide con cualquiera de los valores
No es uno de los_ninNo coincide con ninguno de los valores
Es nulo_nullEs nulo null
No es nulo_nnullNo es nulo null
Contiene_containsContiene la subcadena
Contiene (no distingue entre mayúsculas y minúsculas)_icontainsContiene la subcadena que no distingue entre mayúsculas y minúsculas
No contiene_ncontainsNo contiene la subcadena
Comienza con_starts_withComienza con
Comienza con (sin distinción entre mayúsculas y minúsculas)_istarts_withComienza con, sin distinción entre mayúsculas y minúsculas
No comienza con_nstarts_withNo comienza con
No comienza con (sin distinción entre mayúsculas y minúsculas)_nistants withNo comienza con, sin distinción entre mayúsculas y minúsculas
Termina con_ends_withTermina con
Termina con (sin distinción entre mayúsculas y minúsculas)_iends_withTermina con, sin distinción entre mayúsculas y minúsculas
No termina con_nends_withNo termina con
No termina con (sin distinción entre mayúsculas y minúsculas)_niends_withNo termina con, sin distinción entre mayúsculas y minúsculas
Está entre_betweenEl valor interseca un punto dado
No está entre_nbetweenEl valor no interseca un punto dado
Está vacío_emptyEstá vacío (null o falso)
No está vacío_nemptyNo está vacío (null o falso)

Relacional

Puede apuntar a valores relacionados anidando nombres de campo. Por ejemplo, si tiene un campo relacional Many-to-One, puede establecer una regla para el campo mediante la siguiente sintaxis.authorauthor.name

{
	"author": {
		"name": {
			"_eq": "Rijk van Zanten"
		}
	}
}

Cuando se utilizan relaciones M2M, se creará una tabla de uniones y el filtro se aplicará a la propia tabla de uniones. Por ejemplo, si tiene una colección, con una relación M2M con los autores de cada libro, es probable que la colección de cruces tenga un nombre y 3 campos: y . Para filtrar libros específicos en función de sus autores, debe pasar por la tabla de uniones y el campo :books books_authorsid books_id authors_id authors_id

{
	"authors": {
		"authors_id": {
			"name": {
				"_eq": "Rijk van Zanten"
			}
		}
	}
}

Operadores lógicos

Puede anidar o agrupar varias reglas mediante los operadores lógicos o. Cada operador lógico contiene una matriz de reglas de filtro, lo que permite un filtrado más complejo. Tenga en cuenta también en el ejemplo que los operadores lógicos se pueden subanidar en operadores lógicos. Sin embargo, no se pueden subanidar en reglas de filtro._and_or

{
	"_or": [
		{
			"_and": [
				{
					"user_created": {
						"_eq": "$CURRENT_USER"
					}
				},
				{
					"status": {
						"_in": ["published", "draft"]
					}
				}
			]
		},
		{
			"_and": [
				{
					"user_created": {
						"_neq": "$CURRENT_USER"
					}
				},
				{
					"status": {
						"_in": ["published"]
					}
				}
			]
		}
	]
}

Algunos vs Ninguno en uno a muchos

Al aplicar filtros a un campo de uno a varios, la plataforma usará de forma predeterminada una búsqueda de "algunos", por ejemplo, en:

{
	"categories": {
		"name": {
			"_eq": "Recipe"
		}
	}
}

El elemento primario de nivel superior se devolverá si una de las categorías tiene el nombre . Este comportamiento se puede invalidar mediante el uso de los operadores y explícitos, por ejemplo: Recipe_some_none

{
	"categories": {
		"_none": {
			"name": {
				"_eq": "Recipe"
			}
		}
	}
}

obtendrá todos los elementos principales que no tengan la categoría "Receta".