【问题标题】:cant reach firestore collections id无法访问 Firestore 集合 ID
【发布时间】:2019-02-04 23:41:48
【问题描述】:

当有一个集合时,我试图访问数据,并且在该集合内有一个文档,在该文档内又是一个集合。

但我做不到。

getTeams() {
  this.db
    .doc('epicseven')
    .collection('teams')
    .snapshotChanges()
    .subscribe(data => {
      console.log(data);
    });
}

这是数据库。

我想用最后一个数组访问 JSON,所以我可以在 html 中进行迭代。

感谢您的帮助。

【问题讨论】:

    标签: angular firebase google-cloud-firestore angularfire


    【解决方案1】:

    我认为您一开始就误认为 collection 为 doc。 'epicseven' 是一个集合。在集合始终是文档之后,在文档内部,要么是对集合的引用,要么是对值本身的引用。除了您没有深入到获取所需数据之外,我的猜测是您的查询只会获取团队集合的名称,因为默认情况下 Firestore 查询很浅。我建议以下查询:

    getTeams() {
      this.db
        .collection('epicseven')
        .doc('teams')
        .collection([TEAM_NAME])
        .doc([ID])
        .valueChanges()
        .subscribe(data => {
          console.log(data);
        });
    }
    

    【讨论】:

    • 您好,感谢您的回复。你是对的,我正在更改代码,所以当时是一个文档。但我通常是使用收集方法。问题是我会有不同的团队,我想迭代它们。
    • 我会使用getTeams(teamName, teamId) {...} 的参数,并在其他地方处理选择正确的团队名称/ID。或者,如果您需要获取多个文档,请改用查询功能
    • 但是如果我不知道数据库中的ID,我怎么能访问呢?我的意思是,在你的例子中,我可以访问,这不是问题,但如果我使用随机 ID,将无法更深入地访问。
    • 听起来你需要查询teams,这是一个子集合,这确实还是not possible。我建议你从'teams'中创建一个根集合,这样你可以在像teamsize这样的属性之后查询它,'epicseven'也可以是一个属性,例如league: 'epicseven'这样你就可以查询联赛。
    • 一般来说,鼓励你的数据库尽可能地浅,这意味着不要深入,而是要广泛地使用许多根集合以增强可查询性。 More on query
    【解决方案2】:

    使用这个。

    getTeams() {
      this.db
      .collection('epicseven')
      .doc('teams')
      .collection([TEAM_NAME])
      .doc([ID])
      .snapshotChanges()
      .pipe(map(list => list.map(item => {
         let data = item.payload.doc.data();
         let id = item.payload.doc.id;
         return { id, ...data }
       }))).subscribe(res => {
        console.log(res);
      });
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 2022-01-05
      • 2020-05-20
      • 1970-01-01
      相关资源
      最近更新 更多