Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

381
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda