使用Angular查询Firebase以获取文档密钥

时间:2018-08-27 20:05:27

标签: angular firebase google-cloud-firestore angularfire2

我在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”设计,我需要查询: 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<any>('session').valueChanges();

我认为这会返回'bob'和'jess'

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

但这this.items$ = db.collection<any>('session').valueChanges(); 总是返回一个空数组。 我还尝试了snapshotChanges()而不是valueChanges(),这还会返回一个空数组! 就其运作方式而言,我的想法有误吗?

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

1 个答案:

答案 0 :(得分:0)

docs中所述,<wls:container-descriptor> <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>
不包含valueChanges()(所有元数据均已剥离)

  

valueChanges()
  它是什么? -您收藏的当前状态。返回一个Observable数据作为JSON对象的同步数组。剥夺了所有Snapshot元数据,仅该方法仅提供数据。

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

  

我也尝试了snapshotChanges()而不是valueChanges(),这也返回了一个空数组!

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

snapshotChanges()