![](/img/trans.png)
[英]How to add Document with Custom ID to firestore in firestore 9
[英]Firestore add Document ID to Data via functions
我希望將 Firestore ID 添加到 DocumentData,這樣我就可以在引用表中的行時輕松使用該 ID,而不必每次調用文檔的屬性時都使用 document.data().property。 相反,我希望能夠調用 document.id.... document.property... 等等。
是否有捷徑可尋? 可能是雲 Function 將自動生成的 ID 添加到文檔數據中?
謝謝!
例子:
export const getSpaces = async () => {
const spaceDocs = await getDocs(spacesCollection)
spaceDocs.docs.forEach((spaceDoc) => {
const spaceID = spaceDoc.id
const spaceData = spaceDoc.data()
console.log(spaceID)
spaces.value.push(spaceData)
})
}
現在,spaces 數組具有包含文檔數據的對象。 但是,我失去了引用文檔 ID 的能力。
或者,我可以將整個文檔添加到數組中,但之后,我必須始終通過在兩者之間包含 data() 來訪問屬性。 即 space.data().name
我敢肯定,有更好的方法
DocumentSnapshot具有您要查找的id
屬性。 如果您在文檔中添加內容,則需要先使用doc.data().field_name
訪問數據。
您不需要 Cloud Functions 即可將文檔 ID 添加到該文檔的數據中。 如果您查看有關添加文檔的文檔中的第三個代碼片段,您可以了解如何在編寫文檔之前獲取 ID。
在某些情況下,創建具有自動生成的 ID 的文檔引用並在以后使用該引用可能很有用。 對於此用例,您可以調用
doc()
[不帶任何參數]:
const newCityRef = db.collection('cities').doc(); // 👈 Generates a reference, but doesn't write yet
// Later...
const res = await newCityRef.set({
newCityRef.id, // 👈 Writes the document ID
// ...
});
正如其他人評論的那樣,您不需要將 ID 存儲在文檔中。 您還可以在閱讀文檔時將其添加到您的數據中,方法是:
spaceDocs.docs.forEach((spaceDoc) => {
const spaceID = spaceDoc.id
const spaceData = spaceDoc.data()
console.log(spaceID)
spaces.value.push({ id: spaceID, ...spaceData })
})
通過此更改,您的spaces
將同時包含文檔 ID 和每個文檔的數據。
在處理另一個問題時,我遇到了解決方案。 其實很簡單:
在聲明新的 Object 時,您可以添加...doc.data()
以將 DocumentData 的所有屬性添加到新創建的 Object 中,在使用 id 對其進行初始化后。 無論如何,這對我有用。 結案。
onSnapshot(profilesCollectionRef, (querySnapshot) => {
const profilesHolder = [];
querySnapshot.forEach((doc) => {
const profile = {
id: doc.id,
...doc.data(),
}
profilesHolder.push(profile);
console.log(profile);
});
profiles.value = profilesHolder;
});
onSnapshot(doc(db, "profiles", userId), (doc) => {
const newProfile = {
id: doc.id,
...doc.data(),
}
myProfile.value = newProfile as Profile;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.