Ionic App с использованием Cloud Firestore - Просмотр данных для всех пользователей - PullRequest
0 голосов
/ 01 января 2019

Мои данные имеют следующую структуру:

collection(people)
   document (UserId1)
      collection(profiles)
         document (generatedId1)
            name: 'Speech1'
            type: 'admin'
   document (UserId2)
      collection(profiles)
         document (generatedId2)
            name: 'Client1'
            type: 'client'
      collection(tasks)
         document (generatedId3)
            date: '2018-12-30'
            time: 'AM'
            severity: 0
         document (generatedId4)
            date: '2018-12-30'
            time: 'PM'
            severity: 0
   document (UserId3)
      collection(profiles)
         document (generatedId5)
            name: 'Client2'
            type: 'client'
      collection(tasks)
         document (generatedId5)
            date: '2018-12-30'
            time: 'AM'
            severity: 0
         document (generatedId6)
            date: '2018-12-30'
            time: 'PM'
            severity: 0

Эта структура позволяет мне запрашивать набор задач для вошедшего в систему пользователя с помощью следующего предложения:

getTasks(){
    return new Promise<any>((resolve, reject) => {
      let currentUser = firebase.auth().currentUser;
      this.snapshotChangesSubscription = this.afs.collection('people').doc(currentUser.uid).collection('tasks').snapshotChanges()
      .subscribe(snapshots => {
        resolve(snapshots);
      })
    });
  }

Однако, когда я вхожу в систему как пользователь с правами администратора, я хотел бы видеть данные для всех пользователей, поэтому я пытаюсь создать и запросить, что по сути будет рассматривать все документы вколлекция людей.

Как я могу это сделать?

1 Ответ

0 голосов
/ 03 января 2019

Однако, когда я вхожу в систему как пользователь типа администратора, я хотел бы видеть данные для всех пользователей, поэтому я пытаюсь создать и запросить, который по сути будет рассматривать все документы в коллекции людей.

Как я могу это сделать?

К сожалению, вы не можете использовать эту схему базы данных.Запросы в Firestore являются мелкими, что означает, что они получают только элементы из коллекции, для которой выполняется запрос.Невозможно получить документы из коллекции верхнего уровня и других коллекций или вложенных коллекций в одном запросе.Firestore не поддерживает запросы к различным коллекциям за один раз.Один запрос может использовать свойства документов только в одной коллекции.Поэтому самое простое решение, о котором я могу подумать, - это добавить еще одну коллекцию, в которую вы должны добавить все «документы» во всех подколлекциях, которые существуют во всех people collection -> uid -> generatedId.Таким образом, ваша схема может выглядеть примерно так:

Firestore-root
   |
   --- allDocuments (collection)
         |
         --- generatedId1 (document) //The unique id of the document
         |     |
         |     --- name: 'Speech1'
         |     |
         |     --- type: 'admin'
         |     |
         |     --- uid: 'UserId1'
         |
         --- generatedId 2(document) //The unique id of the document
               |
               --- name: 'Client1'
               |
               --- type: 'client'
               |
               --- uid: 'UserId2'

Чтобы отобразить всех этих пользователей, просто присоедините прослушиватель к ссылке allDocuments и получите все users объекты.Если вы хотите получить всех пользователей с правами администратора, просто используйте Query, который выглядит следующим образом:

var allDocumentsRef = db.collection("allDocuments");
var query = allDocumentsRef.where("type", "==", "admin");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...