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

188
Vistas
Firebase Firestore db.collection no es una función

Estoy desarrollando un programador de turnos y uso la autenticación de base de fuego y la tienda de fuego. Mi idea es que cuando un usuario se registra, crea un documento en la colección "trabajadores" y establece la identificación del documento en el correo electrónico del usuario. Cuando el usuario agrega un turno, quiero agregar la información del turno en una subcolección de "turnos" dentro del documento de ese usuario donde se almacenarán todos los turnos. He leído y visto muchas guías, pero no puedo obtener la sintaxis / lógica correcta, y debido a los cambios de sintaxis de Firebase, incluyo la mayoría de las configuraciones que uso.

base de fuego.js:

 import { getAuth } from "firebase/auth"; import "firebase/firestore"; import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore" require('firebase/auth'); const firebaseConfig = { ... }; const app = initializeApp(firebaseConfig); export const db = getFirestore(app); export const auth = getAuth(app); export default app

Regístrate.js:

 import { db } from "../firebase"; import { collection, addDoc, setDoc, doc } from "firebase/firestore"; import { useAuth } from '../contexts/AuthContext'; const { signup } = useAuth(); const handleSubmit = async (event) => { event.preventDefault(); setError(""); try{ const data = new FormData(event.currentTarget); await signup ( data.get('email'), data.get('password')); const docRef = await setDoc(doc(db, "workers", data.get('email')), { firstName: data.get('firstName'), lastName: data.get('lastName'), email: data.get('email'), numberOfShifts: 0 }); } catch(e){ console.error("Error adding document: ", e); setError("Failed to create an account"); };

El registro funciona bien y la identificación del documento es el correo electrónico. El error es cuando trato de agregar un turno a ese documento (los turnos de la colección no se crean en esta etapa)

Datasheed.js: (donde el usuario ingresa sus turnos)

 import { auth } from "../firebase" import { db } from "../firebase"; const commitChanges = async ({ added, changed, deleted }) => { if (added) { try { db.collection("workers") .doc(auth.currentUser.email) .collection("shifts") .add(added); } catch (e) { console.error("Error adding document: ", e); } }

Por ahora solo estoy tratando de agregar, y la excepción detectada que obtengo es: Error al agregar el documento: TypeError: firebase__WEBPACK_IMPORTED_MODULE_5 _.db.collection no es una función. Por lo que he leído, el problema es que uso firebase modular y ya no tiene db. collection y usa referencias de colección. ¿Necesito también la referencia de la colección para la subcolección? ¿Qué cambios debo hacer para implementar esto?

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

0

Está utilizando SDK modular y también sintaxis modular en signup.js . Debe usar la misma sintaxis en cualquier otro lugar. Intenta refactorizar así:

 const commitChanges = async ({ added, changed, deleted }) => { if (added) { try { await addDoc(collection(db, "workers", auth.currentUser.email, "shifts"), added) } catch (e) { console.error("Error adding document: ", e); } } }

Puede obtener más información sobre la nueva sintaxis en la documentación .

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