【问题标题】:Querying Firebase with Angular to get document keys使用 Angular 查询 Firebase 以获取文档密钥
【发布时间】:2019-02-02 09:41:01
【问题描述】:

我在 Firebase 中有这样的数据结构。它包含人们基本上登录的时间以及在哪个屏幕上(他们在应用程序上的会话)

session
-- bob
--- sessions
---- 0BDRMuw95DFXhWRH7n0s
----- { 15:00, 16:00}
---- ABDRMuw95DFXhWRH7n0s
----- { 16:00, 16:30}
-- jess
--- sessions
---- 0BDRMuw95DFXhWRH7n0s
----- { 10:00, 11:00}
---- LBDRMuw95DFXhWRH7n0s
----- { 16:00, 16:30}

​ 因此,例如,要获取特定 id 的用户“bob”dession,我需要查询: ​​​ session/bob/sessions/0BDRMuw95DFXhWRH7n0s

并取回 { 15:00, 16:00} 的会话 ​​​ 如果我想获取特定用户的会话列表,我会这样做

this.items$ = db.collection<any>('session/bob/sessions').valueChanges();
this.items$.subscribe(res => console.log(res));

然后我得到他所有会话的列表。

现在我的困惑是这样的。上面的代码可以很好地获取 bob 的会话列表。 ​​​ 但是,我想要得到的是用户列表!我以为会是这样的:
this.items$ = db.collection&lt;any&gt;('session').valueChanges();

我以为这会返回 'bob' 和 'jess'​

这样我就可以获得拥有“会话”的所有用户的列表,然后相应地查询每个用户以获取他们的所有会话,就像这样:
this.items$ = db.collection&lt;any&gt;('session/' + user_id + '/sessions').valueChanges();

但是这个this.items$ = db.collection&lt;any&gt;('session').valueChanges(); 总是返回一个空数组。 ​​​ 我也试过snapshotChanges() 而不是valueChanges(),这也返回一个空数组! ​​​ 就其工作原理而言,我的想法是否有错误?

我正在使用 AngularFirestore:https://github.com/angular/angularfire2

【问题讨论】:

    标签: angular firebase google-cloud-firestore angularfire2


    【解决方案1】:

    docs 中所述,valueChanges() 不包括id(所有元数据都被剥离)

    valueChanges()
    它是什么? - 您收藏的当前状态。将数据的 Observable 作为 JSON 对象的同步数组返回。所有 Snapshot 元数据都被剥离,只有方法只提供数据。

    在您的情况下,bobjess 是 id。因此,如果您只想拥有ìd's,则需要使用snapshotChanges()

    我也尝试过用 snapshotChanges() 代替 valueChanges(),这也返回了一个空数组! ​

    好吧,由于您的 snapshotChanges() 代码未包含在帖子中,因此很难猜测出了什么问题,但应该这样使用:

    this.db.collection('session').snapshotChanges()
        .pipe(map(actions => actions.map(a => a.payload.doc.id)));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      • 2018-03-26
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多