# 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>
	}
}

```

<div class="snippet-clipboard-content notranslate position-relative overflow-auto" id="bkmrk-"><div class="zeroclipboard-container"><svg aria-hidden="true" class="octicon octicon-copy js-clipboard-copy-icon" data-view-component="true" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg></div></div>**Ejemplos**

```
{
	"title": {
		"_contains": "Catalogo"
	}
}
```

<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" id="bkmrk--1"><div class="zeroclipboard-container"><svg aria-hidden="true" class="octicon octicon-copy js-clipboard-copy-icon" data-view-component="true" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg></div></div>```
{
	"owner": {
		"_eq": "$CURRENT_USER"
	}
}
```

<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" id="bkmrk--2"><div class="zeroclipboard-container"><svg aria-hidden="true" class="octicon octicon-copy js-clipboard-copy-icon" data-view-component="true" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg></div></div>```
{
	"datetime": {
		"_lte": "$NOW"
	}
}
```

<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" id="bkmrk--3"><div class="zeroclipboard-container"><svg aria-hidden="true" class="octicon octicon-copy js-clipboard-copy-icon" data-view-component="true" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg></div></div>```
{
	"category": {
		"_null": true
	}
}
```

<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" id="bkmrk--4"><div class="zeroclipboard-container"><svg aria-hidden="true" class="octicon octicon-copy js-clipboard-copy-icon" data-view-component="true" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg></div></div>## **Operadores de filtro**

<table id="bkmrk-nombre-del-operador-" style="width: 100%;"><thead><tr><th style="width: 38.1443%;">Nombre del operador (en la aplicación)</th><th style="width: 15.9677%;">Operador</th><th style="width: 45.888%;">Descripción</th></tr></thead><tbody><tr><td style="width: 38.1443%;">Igual a</td><td style="width: 15.9677%;">`_eq`</td><td style="width: 45.888%;">Igual a</td></tr><tr><td style="width: 38.1443%;">No es igual a</td><td style="width: 15.9677%;">`_neq`</td><td style="width: 45.888%;">No es igual a</td></tr><tr><td style="width: 38.1443%;">Menor que</td><td style="width: 15.9677%;">`_lt`</td><td style="width: 45.888%;">Menor que</td></tr><tr><td style="width: 38.1443%;">Menor o igual que</td><td style="width: 15.9677%;">`_lte`</td><td style="width: 45.888%;">Menor o igual que</td></tr><tr><td style="width: 38.1443%;">Mayor que</td><td style="width: 15.9677%;">`_gt`</td><td style="width: 45.888%;">Mayor que</td></tr><tr><td style="width: 38.1443%;">Mayor o igual que</td><td style="width: 15.9677%;">`_gte`</td><td style="width: 45.888%;">Mayor o igual que</td></tr><tr><td style="width: 38.1443%;">Es uno de los</td><td style="width: 15.9677%;">`_in`</td><td style="width: 45.888%;">Coincide con cualquiera de los valores</td></tr><tr><td style="width: 38.1443%;">No es uno de los</td><td style="width: 15.9677%;">`_nin`</td><td style="width: 45.888%;">No coincide con ninguno de los valores</td></tr><tr><td style="width: 38.1443%;">Es nulo</td><td style="width: 15.9677%;">`_null`</td><td style="width: 45.888%;">Es nulo `null`</td></tr><tr><td style="width: 38.1443%;">No es nulo</td><td style="width: 15.9677%;">`_nnull`</td><td style="width: 45.888%;">No es nulo `null`</td></tr><tr><td style="width: 38.1443%;">Contiene</td><td style="width: 15.9677%;">`_contains`</td><td style="width: 45.888%;">Contiene la subcadena</td></tr><tr><td style="width: 38.1443%;">Contiene (no distingue entre mayúsculas y minúsculas)</td><td style="width: 15.9677%;">`_icontains`</td><td style="width: 45.888%;">Contiene la subcadena que no distingue entre mayúsculas y minúsculas</td></tr><tr><td style="width: 38.1443%;">No contiene</td><td style="width: 15.9677%;">`_ncontains`</td><td style="width: 45.888%;">No contiene la subcadena</td></tr><tr><td style="width: 38.1443%;">Comienza con</td><td style="width: 15.9677%;">`_starts_with`</td><td style="width: 45.888%;">Comienza con</td></tr><tr><td style="width: 38.1443%;">Comienza con (sin distinción entre mayúsculas y minúsculas)</td><td style="width: 15.9677%;">`_istarts_with`</td><td style="width: 45.888%;">Comienza con, sin distinción entre mayúsculas y minúsculas</td></tr><tr><td style="width: 38.1443%;">No comienza con</td><td style="width: 15.9677%;">`_nstarts_with`</td><td style="width: 45.888%;">No comienza con</td></tr><tr><td style="width: 38.1443%;">No comienza con (sin distinción entre mayúsculas y minúsculas)</td><td style="width: 15.9677%;">`_nistants with`</td><td style="width: 45.888%;">No comienza con, sin distinción entre mayúsculas y minúsculas</td></tr><tr><td style="width: 38.1443%;">Termina con</td><td style="width: 15.9677%;">`_ends_with`</td><td style="width: 45.888%;">Termina con</td></tr><tr><td style="width: 38.1443%;">Termina con (sin distinción entre mayúsculas y minúsculas)</td><td style="width: 15.9677%;">`_iends_with`</td><td style="width: 45.888%;">Termina con, sin distinción entre mayúsculas y minúsculas</td></tr><tr><td style="width: 38.1443%;">No termina con</td><td style="width: 15.9677%;">`_nends_with`</td><td style="width: 45.888%;">No termina con</td></tr><tr><td style="width: 38.1443%;">No termina con (sin distinción entre mayúsculas y minúsculas)</td><td style="width: 15.9677%;">`_niends_with`</td><td style="width: 45.888%;">No termina con, sin distinción entre mayúsculas y minúsculas</td></tr><tr><td style="width: 38.1443%;">Está entre</td><td style="width: 15.9677%;">`_between`</td><td style="width: 45.888%;">El valor interseca un punto dado</td></tr><tr><td style="width: 38.1443%;">No está entre</td><td style="width: 15.9677%;">`_nbetween`</td><td style="width: 45.888%;">El valor no interseca un punto dado</td></tr><tr><td style="width: 38.1443%;">Está vacío</td><td style="width: 15.9677%;">`_empty`</td><td style="width: 45.888%;">Está vacío (`null` o falso)</td></tr><tr><td style="width: 38.1443%;">No está vacío</td><td style="width: 15.9677%;">`_nempty`</td><td style="width: 45.888%;">No está vacío (`null` o falso)</td></tr></tbody></table>

## **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"
		}
	}
}
```

<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" id="bkmrk--5"><div class="zeroclipboard-container"><svg aria-hidden="true" class="octicon octicon-copy js-clipboard-copy-icon" data-view-component="true" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg></div></div>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"]
					}
				}
			]
		}
	]
}
```

<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" id="bkmrk--6"><div class="zeroclipboard-container"><svg aria-hidden="true" class="octicon octicon-copy js-clipboard-copy-icon" data-view-component="true" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg></div></div>### 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"
		}
	}
}
```

<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" id="bkmrk--7"><div class="zeroclipboard-container"><svg aria-hidden="true" class="octicon octicon-copy js-clipboard-copy-icon" data-view-component="true" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg></div></div>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"
			}
		}
	}
}
```

<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" id="bkmrk--8"><div class="zeroclipboard-container"><svg aria-hidden="true" class="octicon octicon-copy js-clipboard-copy-icon" data-view-component="true" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg></div></div>obtendrá todos los elementos principales que no tengan la categoría "Receta".