Как прочитать поля документа вложенной коллекции из Firestore в реактивный - PullRequest
0 голосов
/ 18 октября 2019

Попытка прочитать все вложенные коллекции из документа внутри коллекции корневого уровня из Firestore Firebase в реактивном проекте. Не слишком уверен, за какой документацией следовать (web-не может сделать getCollections() / узел?). Firebase импортируется, и я успешно извлек другие данные из хранилища, но мне так и не удалось прочитать данные вспомогательной коллекции. Это не использует библиотеку react-native-firebase (хотя я пробовал с реактивом-native-firebase, и у нее также нет документированного решения) В любом случае, я пробовал:

componentDidMount() {
    firebase
      .firestore()
      .collection('users')
      .doc(this.props.user.uid)
      .getCollections('conversations')
      .then(collections => {
        collections.forEach(collection => {
          alert(collection.id)
        })
      }) 
}

вышеупомянутые результаты'_firebase.default.firestore().collection("users").doc(this.props.user.uid).getCollections' is undefined

также пытались:

componentDidMount() {
    firebase
      .firestore()
      .collection("users")
      .doc(this.props.user.uid)
      .collection("conversations")
      .get()
      .then(collections => {
        collections.forEach(collection => {
          alert(JSON.stringify(collection)); //collection.id is can be read here
        });
      });

в приведенном выше примере идентификатор коллекции может быть прочитан, но как можно прочитать поля документа? вышеизложенное дает мне ошибки циклической структуры.

alert(collection.data()) дает мне [object Object]

alert(JSON.stringify(collection.data()) дает мне ошибки циклической структуры

вот пожарный магазин:

enter image description here

enter image description here

Практическим применением будет заполнение всех разговоров для данного пользователя, а затем всех сообщенийдля данного разговора. Как мне прочитать данные из всех вложенных коллекций из Firestore в реактивном проекте?

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Чтобы прочитать данные документа подгруппы, в конечном итоге сработало:

_getConversation() {
    firebase
      .firestore()
      .collection("users")
      .doc(this.props.user.uid)
      .collection("conversations")
      .get()
      .then(querySnapshot => {
        querySnapshot.forEach(queryDocumentSnapshot => {
          alert(queryDocumentSnapshot.get("members"));
        });
      })
      .catch(err => {
        alert(err);
      });
  }

и

_getMessages() {
    firebase
      .firestore()
      .collection("users")
      .doc(this.props.user.uid)
      .collection("conversations")
      .doc("some-document-id-here")
      .collection("messages")
      .get()
      .then(querySnapshot => {
        querySnapshot.forEach(queryDocumentSnapshot => {
          alert(queryDocumentSnapshot.get("content"));
        });
      });
  }

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

0 голосов
/ 19 октября 2019

Привет, попробуйте с ниже

async _getUserDataFromFirestore() {
        try {
          const ref = firebase
            .firestore()
            .collection('user')
            .doc(this.props.user.uid);
          await ref.get().then(userData => {
           console.log('User details of userID - ' + this.props.user.uid , userData.data());
          });  
        } catch (err) {
          console.log('Error while getting user data from firestore : ', err);
        }
      }

Добавить вызов этой функции в componentDidMount

...