【问题标题】:Return a sub-collection in firebase using Angular firestore使用 Angular firestore 在 firebase 中返回子集合
【发布时间】:2019-10-24 17:36:05
【问题描述】:

我有一个子集合,称为保存为每个用户的嵌套集合。 用户有自己的字段和保存的集合,其中包含两个字段和一个数组。我只能显示用户字段,但我不知道访问每个用户子集合的正确方法。

 export class SavedComponent implements OnInit{
  public saved: Saved[];
  public currentUser: any = null;
  public user: User;
  private subscriptions: Subscription[] = [];

  constructor(

    // Adding saved service
    private savedService: SavedService,
    private auth: AuthService,
    private loadingService: LoadingService,
    private route: ActivatedRoute,
    private db: AngularFirestore
  ) {
    // this.loadingService.isLoading.next(true);
}

    this.subscriptions.push(
      this.auth.currentUser.subscribe( user => {
        this.currentUser = user;
        this.loadingService.isLoading.next(false);
        // Console log the current authentiucated user 
        console.log(this.currentUser);
      })
    );

    this.subscriptions.push(
      this.route.paramMap.subscribe( params => {
        const userId = params.get('userId');
        const userRef: AngularFirestoreDocument<User> = this.db.doc(`users/${userId}`);
        userRef.valueChanges().subscribe(user => this.user = user);
      })
    )


   // Example of html template

    <div class="row justify-content-center">
        <div class="col-xs-12 col-sm-8 col-md-6 text-center name">
            {{user?.firstName}} {{user?.lastName}}
        </div>
    </div>

【问题讨论】:

  • this.db.collection(`users/${userId}/saved`)?
  • 我创建了一个服务,我想在其中访问该集合。由于我是 Angular 的新手,我可能会犯一些新手错误。我试图弄清楚为什么说在 savedService 中找不到 userId,因为我已经实现了我的身份验证服务和用户可观察。例如,我正在尝试在 savedService 中编写代码,该代码将为每个用户返回已保存的集合字段。
  • 有些事情似乎不清楚:您可以访问用户字段,这意味着您可以使用 userId 查询用户的文档,但是您无法查询用户的子集合,并且它会引发关于无法找到的 userId 的错误?还要提供您在 savedService 中使用的代码。

标签: javascript firebase google-cloud-firestore angularfire2


【解决方案1】:

正如 Frank van Puffelen 所说,访问用户子集合的最佳选择是

    this.db.collection(`users/${userId}/saved`)

要访问您保存的子集合,您需要首先访问您的用户集合中的用户文档。根据Firestore document,访问子集合文档的查询结构,您可以在访问集合、文档等之间交替访问子集合或子集合的文档。

您不能引用集合中的集合或文档中的文档。

为集合或子集合指定 this.db.collection 并为集合或子集合的文档指定 this.db.doc 很重要。

【讨论】:

  • 我在 userId 上找不到,请阅读我对 Frank 先生评论的评论。谢谢
猜你喜欢
  • 2020-08-19
  • 2021-02-20
  • 1970-01-01
  • 2021-04-11
  • 2020-10-10
  • 2020-06-04
  • 2020-03-11
  • 2020-02-27
  • 2019-02-05
相关资源
最近更新 更多