Cloud Firestore is a flexible and scalable database for server, mobile, and web development from Firebase and Google Cloud.
Firestore Database
Firestore Database is a cloud-hosted database service offered by Google. It is a NoSQL database, which means it does not follow the traditional schema of tables and rows. Instead, Firestore uses a data structure based on JSON, which allows storing data in the form of objects with key-value pairs.
Advantages of Firestore Database:
Easy integration: Firestore Database natively integrates with other Firebase tools and services, such as authentication, cloud storage, and analytics. This makes it easy to build comprehensive applications with a single platform.
Scalability: Firestore Database is managed by Google, so you don't have to worry about the scalability of the database. Google handles the scaling and infrastructure issues.
Serverless: No need to configure or manage servers to use Firestore Database. This saves time and resources, as Google takes care of the underlying infrastructure.
Secure access: Firestore offers flexible security rules that allow you to define who has access to your data and what operations they can perform.
Disadvantages of Firestore Database:
Not suitable for all applications: While Firestore Database is suitable for many applications, it may not be the best choice for all of them. Highly complex applications or those with high scalability requirements may need a more customizable database solution.
Associated costs: Although Firestore offers a free plan, costs may increase as your application grows and reaches larger volumes of data and concurrent users.
Less flexibility: Firestore Database is NoSQL database. If you need to perform complex queries or advanced transactions, you may prefer a traditional SQL database.
When to use Firestore Database:
Firestore Database is an excellent choice for certain types of applications and use cases, such as:
Prototypes and quick projects: Firestore Database is ideal for quickly developing prototypes and small applications without worrying about server setup and management.
Mobile and web applications: Firestore Database integrates well with mobile and web applications, making it easy to develop cross-platform applications.
Small or medium-sized projects: For projects that do not require extreme complexity and can benefit from the ease of use and quick setup of Firestore. .
The Firestore database allows easy and fast integration with different languages, as you can see below, in a few lines you can do the basic operations of a database (CRUD).
import { db } from "../configurations/fireBase.js"; import { userSchema } from "../models/userModel.js"; export default { findOne: async (req, res) => { // FILTER DATA try { let id = req.params.id; const userRef = await db.collection("user").doc(id) const data = await userRef.get() res.status(200).send({ data: data.data() || [], message: 'Ok' }) } catch (error) { return res.status(400).send({ message: error }) } }, show: async (req, res) => { // READ ALL DATA try { let dataResponse = []; const userRef = await db.collection("user") const response = await userRef.get() response.forEach(doc => dataResponse.push({ ...doc.data(), id: doc.id })) res.status(200).send({ data: dataResponse, message: 'Ok' }) } catch (error) { return res.status(400).send({ message: error }) } }, create: async (req, res) => { // CREATE DATA try { const data = await userSchema.validateAsync(req.body) await db.collection("user").add(data) res.status(200).send({ data, message: 'User Created' }) } catch (error) { res.status(400).send({ message: error }) } }, remove: async (req, res) => { // DELETE DATA try { let id = req.params.id await db.collection("user").doc(id).delete() res.status(200).send({ message: 'User deleted' }) } catch (error) { res.status(400).send(error) } }, update: async (req, res) => { // UPDATE DATA try { let id = req.params.id const data = await userSchema.validateAsync(req.body) await db.collection("user").doc(id).update(data) res.status(200).send({ data, message: 'User updated' }) } catch (error) { res.status(400).send(error) } } }
GitHub code https://github.com/vicho-99/api-express-firebase