Para modificar uma informação do nosso banco de dados salvo no firestore, devemos:
Obter a referência do document que agente quer deletar. Para isso podemos usar a função "doc" (previamente temos que importa-la na mesma linha onde importamos as outras funções) já que ela retorna a referência de um document especifico.
Temos que saber que a função "doc" precisa receber 3 argumentos:
a referência do banco
o nome do collection que contém o document que queremos modificar
o id do document que quermos modificar (lembrar que cada document tem um id único que é gerado quando foi criado)
Usar a função "updateDoc" para atualizar o document correspondente (previamente temos que importa-la na mesma linha onde importamos as outras funções). A função "updateDoc" é usada para atualizar um ou mais fields de um document. Esta função retorna uma promessa
Temos que saber que a função "updateDoc" recebe dois argumentos
o document que queremos atualizar
um objeto que vai "substitutir" o document que queremos atualizar. Este objeto pode ter uma ou mais propriedades em dependência de quantos fields agente quera modificar no document. Se especificamos só um ou dois propriedades no objeto, os outros fields do document vão permanecer intatos, e também se no objeto especificamos uma propriedade que não existe no document, então essa propriedade será adicionada no document lá no firestore
NOTA: Se tento apagar ou modificar um document que não existe no banco de dados no firestore, nada vai acontecer, porém o catch da promise devolvida pela função "updateDoc" será executado.
Uso da função "setDoc"
Uma outra forma de atualizar um document é usando a funcão "setDoc". Esta função é usada para criar ou substituir um document no firesotre. Esta função vai criar um document no banco quando o document que estamos tentando modificar não existe no banco.
A função "setDoc" recebe dois argumentos obrigatórios e um terceiro opcional.
o primeiro argumento é o document que queremos atualizar
o segundo argumento é um objeto que "substituirá" o document que queremos atualizar. Porém, ao contrário da função "updateDoc", esta função sempre substitui o document lá no firesotre, ou seja, se no objeto só especificamos uma propriedade e lá no firestore o document tem vários fields, esses fields serão apagados, ou seja, o objeto com só uma propriedade substituirá completamente o document lá no firestore.
o terceiro argumento é um objeto que serve para indicar que os fields do document que não sejam setados como propriedades do segundo argumento (ou seja, o objeto) da função "setDoc" não sejam apagados. O terceiro objeto seria assim: { merge: true }
Em resumo, podemos dizer que:
vamos usar a função "updateDoc" quando agente quera atualizar os fields de um document sem deletar os outros fields que o document tem, porém a função "updateDoc" vai "falhar" caso o document não exista no collection
vamos usar a função "setDoc" quando agente queira atualizar ou criar um document. Também se agente não tem certeza que o document existe, e queremos criar esse document caso ele não existir, podemos usar a função "setDoc" com o merge, já que o merge vai "fundir" as informações atualizadas caso o document já exista, e caso o document não exista ele vai ser criado.
A seguir um exemplo de uso da função "updateDoc" para atualizar um document:
//atualizar um document
const theLastOfUsRef = doc(db, 'games', 'sECn4klHTI5Ykc0o85GS');
updateDoc(theLastOfUsRef, { title: "The Last Of Us Part II "})
.then(() => console.log('Document modificado'))
.catch(console.log)
//neste exemplo, será atualizado o document, ou seja, só vamos atualizar o valor do field "title", e os outros fields do document não sofreram modificações
E agora um outro exemplo de uso da função "setDoc" para atualizar também um document:
//atualizar um document
const theLastOfUsRef = doc(db, 'games', 'sECn4klHTI5Ykc0o85GS');
setDoc(theLastOfUsRef, { title: "The Last Of Us Part II "}, { merge: true})
.then(() => console.log('Document modificado'))
.catch(console.log)
//neste exemplo, será atualizado o document, ou seja, só vamos atualizar o valor do field "title", e os outros fields do document não sofreram modificações já que na função setDoc estamos usando o merge no terceiro argumento
Modificando informações no Firestore
Uso da função "updateDoc"
Para modificar uma informação do nosso banco de dados salvo no firestore, devemos:
NOTA: Se tento apagar ou modificar um document que não existe no banco de dados no firestore, nada vai acontecer, porém o catch da promise devolvida pela função "updateDoc" será executado.
Uso da função "setDoc"
Uma outra forma de atualizar um document é usando a funcão "setDoc". Esta função é usada para criar ou substituir um document no firesotre. Esta função vai criar um document no banco quando o document que estamos tentando modificar não existe no banco. A função "setDoc" recebe dois argumentos obrigatórios e um terceiro opcional.
Em resumo, podemos dizer que:
A seguir um exemplo de uso da função "updateDoc" para atualizar um document:
E agora um outro exemplo de uso da função "setDoc" para atualizar também um document: