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

216
Visualizações
No se puede hacer que la cláusula 'where' funcione en una consulta de Firebase

Tengo problemas para hacer que una consulta funcione, este es el enlace que estoy usando

 export const useCollection = (collection, _query1, _orderBy ) => { const query1 = useRef(_query1).current; const orderBy = useRef(_orderBy).current; useEffect(() => { setIsPending(true); let ref = projectFirestore.collection(collection) if (query1) { ref = ref.where(query1) } if (orderBy) { ref = ref.orderBy(orderBy); } const unsubscribe = ref.onSnapshot( (snapshot) => { let results = []; snapshot.docs.forEach((doc) => { results.push({ ...doc.data(), id: doc.id }); }); // update state setDocuments(results); setError(null); setIsPending(false); }, (error) => { console.log(error); setIsPending(false); setError("could not fetch the data"); } ); // unsubscribe on unmount return () => unsubscribe(); }, [collection, query1, orderBy ]); return { documents, error, isPending }; };

Estoy usando este gancho en este componente

 export default function ViewRxFigures() { const start = new Date('2021-11-01') const { documents, error, isPending } = useCollection( "rxFigures", `'"dateForFigures", "<=" , "${start}"'`, "dateForFigures" );

y obtener un

FirebaseError: Llamada a la función Query.where() con datos no válidos. Valor de campo no admitido: indefinido

definitivamente tiene que ver con pasar la sección 'dónde' de la consulta al gancho. Cuando codifico la consulta en el gancho usando esto

 const start = new Date("2021-11-01") const ref = projectFirestore.collection(collection).where('dateForFigures', '<', start).orderBy('dateForFigures')

La consulta funciona bien y devuelve los datos como se esperaba. Pasé una edad probando diferentes soluciones de SO e Internet y no puedo entender cómo debo pasar la fecha.

El 'dateForFigures' en firebase se almacena como una marca de tiempo.

Realmente agradecería un indicador de dónde me estoy equivocando, ya que no he encontrado una respuesta que ayude en SO o en otro lugar

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Simplifiqué un poco su función para probar esto, y el problema principal aquí parece ser la forma en que está pasando los argumentos de consulta a su enlace. Cuando realiza la consulta, no puede entender el argumento y, por lo tanto, arroja el error que está viendo. Una forma de solucionar esto es encerrar los argumentos de consulta dentro de una matriz y deconstruir la matriz cuando se usa para realizar una consulta:

 function App() { const names = useCollection("users", ["userAge", ">", 23], "userAge"); // Query arguments are in an array console.log(names) return <div className="App"></div>; } export default App;

Aquí está la función completa. Toma todas las propiedades de nombre de mis documentos cuando se modifican:

 export const useCollection = (coll, queryArgs, ordering) => { const query1 = useRef(queryArgs).current; const orderBy = useRef(ordering).current; const [names, setNames] = useState([]); useEffect(() => { let ref = firestoreDB.collection(coll) if (query1) { ref = ref.where(...query1) //Query argument array is deconstructed here } if (orderBy) { ref = ref.orderBy(orderBy); } const unsubscribe = ref.onSnapshot( (snapshot) => { let newNames = []; snapshot.docChanges().forEach((change) => { newNames.push(change.doc.data().firstName); }); setNames(newNames); }, (error) => { console.log(error); } ); // unsubscribe on unmount return () => unsubscribe(); }, [coll, query1, orderBy]); return names; };

Otra cosa a tener en cuenta es que, si desea procesar solo los cambios de documentos, también puede usar el método docChanges() de QuerySnapshot . Sin embargo, esto varía para cada caso de uso.

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