Запрос Firebase с Angular для получения ключей документа - PullRequest
0 голосов
/ 27 августа 2018

У меня есть такая структура данных в 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}

Так, например, чтобы получить пользовательское «боб» отклонение определенного идентификатора, мне нужно сделать запрос: session/bob/sessions/0BDRMuw95DFXhWRH7n0s

И вернитесь на сессию {15:00, 16:00} Если бы я хотел получить список сеансов для конкретного пользователя, я бы сделал это

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

Тогда я получаю список всех его сеансов.

Теперь моя путаница заключается в следующем. Приведенный выше код прекрасно работает, чтобы получить список сеансов для Боба. Тем не менее, я хочу получить список пользователей! Который я думал, будет следующим:
this.items$ = db.collection<any>('session').valueChanges();

Я думал, что это вернет 'Боб' и 'Джесс'

Чтобы я мог получить список всех пользователей, у которых есть «сеанс», а затем запросить каждого пользователя соответствующим образом, чтобы получить все свои сеансы, примерно так:
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 голосов
/ 29 августа 2018

Как указано в документах , valueChanges() не включает id (все метаданные удаляются)

valueChanges ()
Что это? - Текущее состояние вашей коллекции. Возвращает Observable данных в виде синхронизированного массива объектов JSON. Все метаданные снимка удаляются, и только метод предоставляет только данные.

В вашем случае bob и jess - это идентификаторы. Так что если вы хотите иметь только ìd's, вам нужно использовать snapshotChanges()

Я также пытался использовать snapshotChanges () вместо valueChanges (), и это также возвращает пустой массив!

Хорошо, поскольку ваш код с snapshotChanges() не включен в сообщение, трудно догадаться, что пошло не так, но его следует использовать так:

this.db.collection('session').snapshotChanges()
    .pipe(map(actions => actions.map(a => a.payload.doc.id)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...