Populate
Populate de datos
El populate es una técnica que permite reemplazar automáticamente los identificadores (referencia de un documento) por el objeto real al que hace referencia.
¿Por qué usar populate?
El uso de populate es útil cuando se necesita obtener información de un documento relacionado en lugar de solo el identificador.
- Sin populate
- Con populate
GET /api/students
{
"response": [
{
"_id": "60bc56500000000000000000",
...
"school": "6487f7d00000000000000000"
}
],
"errors": []
}
GET /api/students?populate={"school": "name"}
{
"response": [
{
"_id": "60bc56500000000000000000",
...
"school": {
"_id": "6487f7d00000000000000000",
"name": "Escuela 1"
}
}
],
"errors": []
}
Sintaxis populate
El comportamiento de populate se define en el parámetro populate
de la consulta. Si no se especifica el campo a seleccionar, se devolverán todos los campos del documento al que hace referencia.
La sintaxis para usar populate son las siguientes:
{
"populate": {
"<propiedad_con_id>": "<select_campo_1> <select_campo_2> ..."
}
}
Por defecto algunas rutas de la api ya cuentan con un populate interno, y para usarlo es necesario enviar el parámetro populate
con el valor true
{
"populate": true
}
A su vez se pueden agregar múltiples propiedades donde actuará el populate
{
"populate": {
"<propiedad_con_id_1>": "<select_campo_1> <select_campo_2> ...",
"<propiedad_con_id_2>": "<select_campo_1> <select_campo_2> ..."
}
}
Soporte para populate a varios niveles
{
"populate": {
"<propiedad_con_id_1>.<propiedad_con_id_2>": "<select_campo_1> <select_campo_2> ..."
}
}
Ejemplos comunes
- Populate simple
- Populate a varios niveles
GET /api/students?populate={"user": "name surname", "school": "name"}
{
"response": [
{
"_id": "60bc56500000000000000000",
...
"user": {
"name": "Juan",
"surname": "Pérez"
},
"school": {
"name": "Escuela 1"
}
},
{
"_id": "60bc56500000000000000001",
...
"user": {
"name": "Carlos",
"surname": "Gómez"
},
"school": {
"name": "Escuela 1"
}
}
],
"errors": []
}
GET /api/students?populate={"years.year": "name"}
{
"response": [
{
"_id": "60bc56500000000000000000",
...
"years": [
{
"year": {
"name": "Año 1"
}
}
]
},
{
"_id": "60bc56500000000000000001",
...
"years": [
{
"year": {
"name": "Año 2"
}
}
]
}
],
"errors": []
}