💩 firestore crud operations

I recently added a few videos to my Firebase series which cover CRUD operations in Firestore. But watching a video can get tiresome if you're looking for a snippet of code. These methods are something I'll come back to time and time again, so here's a quick copy and paste reference for CRUD operations in Firestore.

🆕 create

This snippet creates a new document in a collection. It relies on Firestore to automatically generate a document id.

const createUser = async user => {
    const ref = await firestore.collection("users").add(user)

    const newUser = {
        id: ref.id,
        ...user,
    }

    return newUser
}

📚 read

This function retrieves all documents from a collection. It merges the id with the document data.

const readUsers = async () => {
    const snapshot = await firestore.collection("users").get()

    const users = snapshot.docs.map(doc => ({
        id: doc.id,
        ...doc.data(),
    }))

    return users
}

This method gets a single document by id from a collection. Similar to the function above, it combines the id and the document data.

const readUser = async id => {
    const doc = await firestore.collection("users").doc(id).get()

    const user = {
        id: doc.id,
        ...doc.data(),
    }

    return user
}

Many times you won't be pulling documents by id, but rather searching them by a field name. This function gets a document by its name field. Again, it merges the id with the data when returning the document.

const readUserByName = async name => {
    const snapshot = await firestore
        .collection("users")
        .limit(1)
        .where("name", "==", name)
        .get()

    const doc = snapshot.docs[0]

    const user = {
        id: doc.id,
        ...doc.data(),
    }

    return user
}

☝🏼 update

This function updates an existing document by id in a collection. Updates are merged into the existing document. A second call to firestore is made to retrieve the latest document. The returned object combines the id and the document data.

const updateUser = async (id, updates) => {
    await firestore.collection("users").doc(id).update(updates)
    const doc = await firestore.collection("users").doc(id).get()

    const user = {
        id: doc.id,
        ...doc.data(),
    }

    return user
}

If you are looking to replace a document, see the set documentation.

⛔ delete

This function deletes a document by id and returns that id.

const deleteUser = async id => {
    await firestore.collection("users").doc(id).delete()
    return id
}

I hope this little cheat sheet provides as much value to you as it already has to me!