[英]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.