Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

378
Vistas
Consultas compuestas complejas en firebase V9

Empecé a trabajar con la nueva versión modular de Firebase web v9 modular . Y para filtrar el resultado, necesito usar compound queries . Tengo tres entradas:

  1. Nombre de pila
  2. Apellido
  3. Escribe

Cuando filtro el resultado, no siempre hago una solicitud por tres consultas, a veces uso una o dos consultas por solicitud, por lo que no sé cuántas consultas tengo que hacer, siempre es diferente.

Para resolver esto en la versión web v8 namespased , hice este código:

 const [firstName, setFirstName] = useState('') const [lastName, setLastName] = useState('') const [type, setType] = useState('') const filterRezult = () => { let filterQuety = db.collection('users') if(firstName !== ''){ filterQuety = filterQuety.where('data.first_name', '==', firstName) } if(lastName !== ''){ filterQuety = filterQuety.where('data.last_name', '==', lastName) } if(type !== ''){ filterQuety = filterQuety.where('data.type', '==', type) } await filterQuety.get().then((result) => { ... }) }

Y trabaja muy bien. ¿Alguna sugerencia sobre cómo hacer lo mismo en la versión web v9 modular ?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Eso sería:

 const conditions = [] if(firstName !== ''){ conditions.push(where('data.first_name', '==', firstName)) } if(lastName !== ''){ conditions.push(where('data.last_name', '==', lastName)) } if(type !== ''){ conditions.push(where('data.type', '==', type)) } const filterQuery = query(collection(db, 'users'), ...conditions) const result = await getDocs(filterQuery)

Recomiendo encarecidamente tener a mano la documentación y la guía de actualización durante este tipo de ejercicio.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Encuentro una solución a esta situación.

Entonces, dado que todos los campos son cadenas no vacías en la base de datos, puedo usar el operador Not equal (!=) en la declaración condicional. Si mi estado no es igual a una cadena vacía, realizo una consulta según la condición requerida, si el estado es una cadena vacía, realizo una consulta de todos los documentos que contienen datos de cadena no vacíos.

Debería verse algo así

 const [firstName, setFirstName] = useState('') const [lastName, setLastName] = useState('') const [type, setType] = useState('') const filterRezult = async () => { const searchRef = collection(db, 'users') const querySearch = query(searchRef, (firstName !== '' ? where('data.first_name', '==', firstName) : where('data.first_name', '!=', firstName) ), (lastName !== '' ? where('data.last_name', '==', lastName) : where('data.last_name', '!=', lastName) ), (type !== '' ? where('data.type', '==', type) : where('data.type', '!=', type) } await getDocs(querySearch) .then((result) => { ... }) .catch((error) => { ... }) }

No sé si es la mejor solución, pero en mi caso funciona bastante bien.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda