I want to update a doc like this:
db.collection(\'users\').doc(user_id).update({foo:\'bar\'})
However, if the doc user_id does not exists,
If you need things like created
and updated
timestamps, you can use this technique:
let id = "abc123";
let email = "john.doe@gmail.com";
let name = "John Doe";
let document = await firebase.firestore().collection("users").doc(id).get();
if (document && document.exists) {
await document.ref.update({
updated: new Date().toISOString()
});
}
else {
await document.ref.set({
id: id,
name: name,
email: email,
created: new Date().toISOString(),
updated: new Date().toISOString()
}, { merge: true });
}
This will create the document if it doesn't exist with created
and updated
timestamps, but only change the updated
timestamp if it exists.
I think you want to use this code:
db.collection('users').doc(user_id).set({foo:'bar'}, {merge: true})
This will set the document with the provided data and will leave other document fields intact. It is best when you're not sure whether the document exists. Simply pass the option to merge the new data with any existing document to avoid overwriting entire documents.
For more detailed about managing data with firestore check this link