Consultas y Operaciones de Datos en Firestore

Clase 19 de 32Curso de Firebase 5 para Web

Resumen

¿Qué capacidades avanzadas ofrece Firestore para consultas e inserciones de datos?

Firestore, la base de datos no relacional de Google Cloud, proporciona una serie de potentes herramientas para manejar datos de forma eficiente. En este artículo, exploraremos diversas capacidades de Firestore en la consulta e inserción de datos, desde operaciones básicas hasta técnicas avanzadas como las operaciones batch y el manejo de datos con índices.

¿Cómo se realiza una inserción con un identificador propio?

Una de las funcionalidades útiles de Firestore es la inserción de documentos con un identificador proporcionado por el usuario. Aunque Firestore puede generar automáticamente un ID único, a veces puede ser necesario asignar un identificador propio. Para ello, se utiliza una función que permite definir el ID del documento al momento de la inserción.

const postRef = firestore.collection('posts').doc('customID');
postRef.set({
  title: 'Custom Post',
  content: 'This is a custom ID post'
});

¿Qué son las operaciones batch y cómo se ejecutan?

Las operaciones batch permiten ejecutar múltiples operaciones simultáneamente. Son ideales para mejorar el rendimiento de la aplicación al reducir latencia en la comunicación con Firestore.

  • Declarar operaciones batch: Se asigna una referencia para ejecutar las operaciones.
  • Adjuntar las operaciones: Utilizar batch.set para insertar documentos.
  • Confirmar las operaciones: Con batch.commit se ejecutan todas las operaciones.
const batch = firestore.batch();
const post1Ref = firestore.collection('posts').doc('post1');
const post2Ref = firestore.collection('posts').doc('post2');
const post3Ref = firestore.collection('posts').doc('post3');

batch.set(post1Ref, { title: 'Batch Post 1' });
batch.set(post2Ref, { title: 'Batch Post 2' });
batch.set(post3Ref, { title: 'Batch Post 3' });

batch.commit().then(() => {
  console.log('Batch executed successfully.');
});

¿Cómo se añade un nuevo campo a un documento sin reemplazar los existentes?

Para actualizar un documento añadiendo un nuevo campo sin perder los existentes, Firestore ofrece la opción de fusionar los campos utilizando el atributo merge.

const postRef = firestore.collection('posts').doc('postID');
postRef.set({ imageLink: 'http://example.com/image.png' }, { merge: true });

¿Cómo se realizan actualizaciones de documentos?

Firestore permite actualizar campos de un documento específico mediante la función update. Esto involucra referenciar el documento y proporcionar un objeto con los campos a actualizar.

const postRef = firestore.collection('posts').doc('postID');
postRef.update({ title: 'Updated Title' });

¿Qué opciones existen para realizar consultas en Firestore?

Firestore soporta una variedad de consultas directas y compuestas que permiten extraer datos siguiendo criterios específicos.

Consultas directas

Para obtener un documento específico, se utiliza .get() sobre la referencia del documento.

const docRef = firestore.collection('posts').doc('postID');
docRef.get().then(doc => {
  console.log(`Document Title: ${doc.data().title}`);
});

Consultas con filtros

Para buscar documentos que cumplan ciertos criterios, se puede usar filtros where.

firestore.collection('posts')
  .where('title', '==', 'Specific Title')
  .get()
  .then(snapshot => {
    snapshot.forEach(doc => {
      console.log(doc.id, '=>', doc.data());
    });
  });

Consultas compuestas

Firestore soporta consultas compuestas usando múltiples filtros con operadores como >=, <=, y ==.

firestore.collection('posts')
  .where('author', '==', 'AuthorName')
  .where('date', '<=', new Date())
  .get()
  .then(snapshot => {
    snapshot.forEach(doc => {
      console.log(doc.id, '=>', doc.data());
    });
  });

¿Cómo se gestionan los datos con consultas ordenadas y limitadas?

Firestore permite ordenar y limitar la cantidad de datos devueltos por una consulta mediante orderBy y limit.

firestore.collection('posts')
  .orderBy('title')
  .limit(3)
  .get()
  .then(snapshot => {
    snapshot.forEach(doc => {
      console.log(doc.id, '=>', doc.data());
    });
  });

¿Cómo eliminamos campos y documentos completos?

La eliminación de campos, así como de documentos completos, puede hacerse usando las funciones update para campos y delete para documentos.

Eliminar un campo específico

const postRef = firestore.collection('posts').doc('postID');
postRef.update({
  unwantedField: firebase.firestore.FieldValue.delete()
});

Eliminar un documento completo

firestore.collection('posts').doc('postID').delete().then(() => {
  console.log('Document successfully deleted!');
});

¡Estos son solo algunos de los métodos que Firestore ofrece para manejar datos de manera eficiente! A medida que te adentres en su uso, descubrirás que puedes optimizar aún más tus aplicaciones utilizando Firestore. Siempre es un buen momento para seguir aprendiendo y profundizando en estas tecnologías potentes.