'Firebase V9 - Custom 'Doc ID' Upon Creation (Javascript)
Im wanting to create a doc in Firebase Firestore with Javascript... That doesn't just have the automatic generated ID
return addDoc(collection(db, "users"), { bio: signupForm['signup-bio'].value });
This is how I'm coding it could someone please show me where or how to add a custom ID to to the doc?
Thanks
Solution 1:[1]
Ok, I figured it out...
To create a custom ID for a new doc is as follows...
setDoc(doc(db, 'collection', 'ID'), { feild: value, feild: value });
or in my case as an example...
setDoc(doc(db, 'users', (cred.user.uid), { bio: signupForm['signup-bio'].value });
This creates a new doc (and the users collection if it doesn't exist already) with the ID being the current logged in users UserID and the data in the doc is the value from a signup form called 'signup-bio'
Solution 2:[2]
In order to set custom document IDs in Firestore, you need to use the set
method instead of add
:
db.collection("users").doc("YOUR_ID").set({
bio: signupForm['signup-bio'].value
});
You can refer to the official documentation on how to Set a document which states that:
To create or overwrite a single document, use the set() method:
// Add a new document in collection "cities"
db.collection("cities").doc("LA").set({
name: "Los Angeles",
state: "CA",
country: "USA"
})
.then(() => {
console.log("Document successfully written!");
})
.catch((error) => {
console.error("Error writing document: ", error);
});
If the document does not exist, it will be created. If the document does exist, its contents will be overwritten with the newly provided data, unless you specify that the data should be merged into the existing document...
Solution 3:[3]
For someone who using collection as variable / existing function.
Example in Typescript like this https://javascript.plainenglish.io/using-firestore-with-typescript-in-the-v9-sdk-cf36851bb099
Normal:
const docRef = doc(helloCol())
But you can also do something likeā¦:
const docRef = doc(helloCol(), 'some-id')
// await setDoc(docRef, { /* data */ })
Without changing helloCol()
?
Ref: https://firebase.google.com/docs/reference/js/firestore_.md#doc
Solution 4:[4]
For me the following worked:
await setDoc(doc(db, "collection/" + newId), { field: value} )
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | KuKu |
Solution 2 | tmarwen |
Solution 3 | l2aelba |
Solution 4 | Pauldb |