[英]How to get the data of a user who created a document
我有兩個 collections,一個用於注冊屬性,一個用於注冊用戶。
注冊屬性的集合稱為listings
,注冊用戶的集合稱為users
。
我使用參數listingId
訪問listings
集合中的文檔,該參數是文檔 ID。
我通過傳入的參數從文檔中獲取數據:
const fetchListing = async () => {
const docRef = doc(db, 'listings', listingId)
// response
const docSnap = await getDoc(docRef)
if (docSnap.exists) {
listing = docSnap.data()
}
}
我需要獲取創建文檔的用戶的字段(名稱、email、twitter 等)。 我該怎么做呢?
每個文檔都有創建它的用戶的 ID。
您必須執行以下操作:
data()
方法返回的 Object 獲取用戶 ID 值(如文檔中所述,“此方法將文檔中的所有字段作為對象檢索”)。data()
方法)。 const fetchListing = async () => {
const docRef = doc(db, 'listings', listingId);
const docSnap = await getDoc(docRef);
if (docSnap.exists) {
const userId = docSnap.data().user;
const userDocRef = doc(db, 'users', userId);
const userDocSnap = await userDocRef(docRef);
if (userDocSnap.exists) {
const userName = docSnap.data().name;
const userEmail = docSnap.data().email;
// ...
}
}
};
請注意,在 NoSQL 世界中,您的用例的一種常見方法是對您的數據進行非規范化處理,以便您以最少的查詢次數在前端獲取所有必要的數據。 這是一篇關於 NoSQL 數據建模方法的“著名” 帖子。
更具體地說,這意味着在每個列表文檔中,您將復制其作者/創建者的數據。
這種方法的一個副作用是您需要保持值同步(即用戶文檔中的值和列表文檔中的值)。 如果修改了用戶文檔,則可以通過觸發 Cloud Function 來完成此同步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.