使用 Angular (@angular/fire) 在 firestore 中添加、更新和读取 sub-collection
Add, update and read sub-collection in firestore using Angular (@angular/fire)
我正在尝试学习 firebase。我正在使用 Angular 和 Firebase 制作类似 Linkedin 的项目。
我在我的项目中使用@angular/fire包。
到目前为止,我已经完成了身份验证并添加了用户的一些基本信息。我有 users
collection,其中每个 documentId
都有 name
、email
等信息
现在我的下一个目标是创建一个工作经验部分。由于一个用户可以有多个工作经验。
我必须决定在每个用户文档 ID 下继续使用 sub-collection,而不是为 work-experience
.
创建单独的 collection
现在我在如何在 users
collection.
中添加 sub-collection 时遇到了一些麻烦
一个用户一次只能add/update一次体验。我的 UI 将类似于 Linkedin。单击 'Add Experience' 按钮时,将弹出一个模式,并且表单内将有一个表单,其中包含 jobTitle
、companyName
等字段。所以一旦提交被点击,我想要使用唯一的 documentId 将数据保存在 work-experience
sub-collection 下。
目前我正在这样添加我的基本信息
添加
addUser(user: any): Observable<void> {
const ref = doc(this.firestore, 'users', user.uid);
return from(setDoc(ref, user));
}
正在更新
updateUser(user: any): Observable<void> {
const ref = doc(this.firestore, 'users', user.uid);
return from(updateDoc(ref, { ...user }));
}
现在我想在 users
collection 下添加名为 work-experience
的 sub-collection。
根据您的 ,我认为您需要添加一个 sub-collection,其中包含 ID 为 work-experience
的文档。
如果我的假设是正确的,请按照以下步骤创建此文档的DocumentReference
:
const workExperienceDocRef = doc(this.firestore, `users/${user.uid}/sub-sections/work-experience`);
注意:一定要使用back ticks.
然后你可以设置这个文档的数据如下,例如:
return from(setDoc(workExperienceDocRef, {experiences: [{years: "2015-2018", company: "comp1"}, {years: "2018-2021", company: "comp2"}]}));
如果要为用户的文档创建sub-collection,请执行以下操作:
const userSubCollection = collection(this.firestore, `users/${user.uid}/sub-collection`);
然后你可以使用addDoc()
方法,它会自动生成文档ID。:
const docRef = await addDoc(userSubCollection, {
foo: "bar",
bar: "foo"
});
我正在尝试学习 firebase。我正在使用 Angular 和 Firebase 制作类似 Linkedin 的项目。
我在我的项目中使用@angular/fire包。
到目前为止,我已经完成了身份验证并添加了用户的一些基本信息。我有 users
collection,其中每个 documentId
都有 name
、email
等信息
现在我的下一个目标是创建一个工作经验部分。由于一个用户可以有多个工作经验。
我必须决定在每个用户文档 ID 下继续使用 sub-collection,而不是为 work-experience
.
现在我在如何在 users
collection.
一个用户一次只能add/update一次体验。我的 UI 将类似于 Linkedin。单击 'Add Experience' 按钮时,将弹出一个模式,并且表单内将有一个表单,其中包含 jobTitle
、companyName
等字段。所以一旦提交被点击,我想要使用唯一的 documentId 将数据保存在 work-experience
sub-collection 下。
目前我正在这样添加我的基本信息
添加
addUser(user: any): Observable<void> {
const ref = doc(this.firestore, 'users', user.uid);
return from(setDoc(ref, user));
}
正在更新
updateUser(user: any): Observable<void> {
const ref = doc(this.firestore, 'users', user.uid);
return from(updateDoc(ref, { ...user }));
}
现在我想在 users
collection 下添加名为 work-experience
的 sub-collection。
根据您的 work-experience
的文档。
如果我的假设是正确的,请按照以下步骤创建此文档的DocumentReference
:
const workExperienceDocRef = doc(this.firestore, `users/${user.uid}/sub-sections/work-experience`);
注意:一定要使用back ticks.
然后你可以设置这个文档的数据如下,例如:
return from(setDoc(workExperienceDocRef, {experiences: [{years: "2015-2018", company: "comp1"}, {years: "2018-2021", company: "comp2"}]}));
如果要为用户的文档创建sub-collection,请执行以下操作:
const userSubCollection = collection(this.firestore, `users/${user.uid}/sub-collection`);
然后你可以使用addDoc()
方法,它会自动生成文档ID。:
const docRef = await addDoc(userSubCollection, {
foo: "bar",
bar: "foo"
});