Crear documentos:
import {
collection,
addDoc,
doc,
setDoc
} from 'firebase/firestore';
// Opción 1: Auto-ID (recomendado)
async function crearUsuario(nombre, email) {
const docRef = await addDoc(collection(db, 'usuarios'), {
nombre: nombre,
email: email,
createdAt: new Date(),
activo: true
});
console.log('Documento creado con ID:', docRef.id);
return docRef.id;
}
// Opción 2: ID personalizado
async function crearUsuarioConId(userId, datos) {
await setDoc(doc(db, 'usuarios', userId), {
...datos,
createdAt: new Date()
});
}
Leer documentos:
import {
doc,
getDoc,
collection,
getDocs,
query,
where
} from 'firebase/firestore';
// Leer un documento
async function obtenerUsuario(userId) {
const docRef = doc(db, 'usuarios', userId);
const docSnap = await getDoc(docRef);
if (docSnap.exists()) {
console.log('Datos:', docSnap.data());
return { id: docSnap.id, ...docSnap.data() };
} else {
console.log('Documento no encontrado');
return null;
}
}
// Leer colección completa
async function obtenerTodosUsuarios() {
const querySnapshot = await getDocs(collection(db, 'usuarios'));
const usuarios = [];
querySnapshot.forEach((doc) => {
usuarios.push({ id: doc.id, ...doc.data() });
});
return usuarios;
}
// Leer con filtro
async function obtenerUsuariosActivos() {
const q = query(
collection(db, 'usuarios'),
where('activo', '==', true)
);
const querySnapshot = await getDocs(q);
// ...
}
Actualizar documentos:
import {
doc,
updateDoc,
increment,
arrayUnion,
arrayRemove
} from 'firebase/firestore';
// Actualizar campos específicos
async function actualizarUsuario(userId, datos) {
const userRef = doc(db, 'usuarios', userId);
await updateDoc(userRef, {
...datos,
updatedAt: new Date()
});
}
// Operaciones atómicas
async function incrementarVisitas(postId) {
const postRef = doc(db, 'posts', postId);
await updateDoc(postRef, {
visitas: increment(1)
});
}
// Arrays
async function agregarTag(postId, tag) {
const postRef = doc(db, 'posts', postId);
await updateDoc(postRef, {
tags: arrayUnion(tag) // Agrega si no existe
});
}
async function removerTag(postId, tag) {
const postRef = doc(db, 'posts', postId);
await updateDoc(postRef, {
tags: arrayRemove(tag) // Remueve si existe
});
}
Eliminar documentos:
import { doc, deleteDoc } from 'firebase/firestore';
async function eliminarUsuario(userId) {
await deleteDoc(doc(db, 'usuarios', userId));
console.log('Usuario eliminado');
}
// Eliminar con confirmación
async function eliminarConConfirmacion(userId) {
const userRef = doc(db, 'usuarios', userId);
// Primero verificar que existe
const docSnap = await getDoc(userRef);
if (docSnap.exists()) {
await deleteDoc(userRef);
return true;
}
return false;
}
💡 Tip: Usa transacciones para operaciones que requieren consistencia, como transferencias de saldo.