Firebase Firestore Query получить один результат - PullRequest
3 голосов
/ 16 октября 2019

Я ищу лучший способ:
1. запросить один единственный результат или
2. извлечь первый результат из запроса

попытался: collection[0] и collection.pop() или collection.shift() и ничего не работает

Мне действительно не нравится код, который я использую, но он работает ...

export const findUserByEmail = email => {
  return firestore()
    .collection('users')
    .where('email', '==', email.toLowerCase())
    .get()
    .then(collection => {
      console.log(collection)
      let user
      collection.forEach(doc => user = doc.data())
      return user
    })
}

Ответы [ 2 ]

3 голосов
/ 16 октября 2019

Ваш запрос возвращает QuerySnapshot ( см. Документы ). Вы можете получить доступ к данным в виде массива через свойство docs:

export const findUserByEmail = email => {
  return firestore()
    .collection('users')
    .where('email', '==', email.toLowerCase())
    .get()
    .then(querySnapshot => {
      if(!querySnapshot.empty) {
        const user = querySnapshot.docs[0]
        // rest of your code 
      }
    })
}
0 голосов
/ 16 октября 2019

пробовал: collection[0] и collection.pop() и ничего не работает

Эти 2 по порядку означают:

  1. collection[0] - доступпервый элемент массива
  2. collection.pop() - pop get избавляется от последнего элемента массива

Может быть основан на логике вашего кода, вы должны попробовать: collection[0].data();например, используя collection[0], вы получаете доступ к первому элементу, но из существующего кода вам нужно вызвать .data(), чтобы извлечь его.

forEach просто получает доступ ко всему содержимому collection. Хотя collection.pop() в данном случае просто не подходит для работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...