Угловой пожарный запрос к документу пожарного депо - PullRequest
0 голосов
/ 29 августа 2018

У меня есть запрос ниже

    selectedUser$: AngularFirestoreDocument<any>;
    this.selectedUser$ = this.userCollection.ref.where('uid', '==', key)

Ошибка броска

Тип «Запрос» не может быть назначен типу 'AngularFirestoreDocument. Свойство ref отсутствует в типе 'Запрос'.

Я пытался

this.selectedUser$ = this.userCollection.ref.where('uid', '==', key).get()

безуспешно

По сути, я хочу, чтобы запрос вернул документ пожарного депо

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Ошибка, которую вы получаете, заключается в том, что вы смешиваете исходный API Firebase и Angularfire.

selectedUser$: AngularFirestoreDocument<any>;

Вызов .ref на вашем AngularFirestoreCollection преобразует его в тип firebase.firestore.CollectionReference

При этом есть 2 возможности решить вашу проблему:

Использование angularfire:

Я предполагаю, что ваша пользовательская коллекция выглядит примерно так: this.afs.collection<User>. Поскольку вы запрашиваете коллекцию, нет никакого способа гарантировать, что ваш предикат запроса uid == key уникален в базе данных firebase. Таким образом, вы запрашиваете коллекцию и limit() результат. Это вернет вам массив с одним документом. flatMap() вернет вам одного пользователя.

this.afs.collection<User>('users', ref => ref.where('uid', '==', key).limit(1))
   .valueChanges()
   .pipe(
       flatMap(users=> users)
   );

Использование firebase нативного API:

const query = this.usersCollection.ref.where('uid', '==', key);
query.get().then(querySnapshot => {
    if (querySnapshot.empty) {
        console.log('no data found');
    } else if (querySnapshot.size > 1) {
        console.log('no unique data');
    } else {
        querySnapshot.forEach(documentSnapshot => {
            this.selectedUser$ = this.afs.doc(documentSnapshot.ref);
            // this.afs.doc(documentSnapshot.ref).valueChanges().subscribe(console.log);
            });
        }
    });

Таким образом, несколько цепочек .where несколько проще, если это необходимо

0 голосов
/ 29 августа 2018

Вам будет легче помочь, если вы добавите более подробную информацию о структуре вашей коллекции Firestore и вашем файле машинописного текста.

Однако для запроса коллекции я делаю следующее:

  1. Определение частного AngularFirestore в конструкторе.

    constructor(
      private afStore: AngularFirestore,
    ) 
    {
    }
    
  2. Определите запрос и передайте результат в AngularFirestoreDocument.

    this.selectedUser$ = this.afStore
        .collection('TheNameOfYourCollection').doc<any>(key);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...