我在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
答案 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元数据,仅该方法仅提供数据。
在您的情况下,id
和bob
是id。因此,如果您只想拥有jess
,则需要使用ìd's
我也尝试了snapshotChanges()而不是valueChanges(),这也返回了一个空数组!
好吧,由于您的帖子中未包含带有snapshotChanges()
的代码,因此很难猜测出了什么问题,但是应该这样使用:
snapshotChanges()