Заставить firebase вернуть отсортированный ответ - PullRequest
0 голосов
/ 21 января 2019

У меня есть база данных на Firebase.Я пытаюсь сделать так, чтобы, когда пользователи вводят значение, они возвращали 10 ближайших предложений.Это мой запрос на данный момент:

<textarea className='addFriendTextArea' onChange={handleChange} placeholder='Dodaj znajomego'/>

handleChange = async (e) => {
    const {value} = e.target;
    firebase
        .database()
        .ref('Users')
        .orderByChild('nickname')
        .startAt(value)
        .limitToFirst(10)
        .once('value')
        .then(r => arrayFromObject(r.val()))
        .catch(e => console.log(e));
};

Это почти работает.Проблема в том, что если я наберу, например, железо, я получу это:

enter image description here

И если я наберу, например, brunonbane3,вот что я получаю:

enter image description here

Так что они не отсортированы.Я знаю, что мог бы сортировать их, используя мой интерфейсный JavaScript, но есть ли способ отсортировать их с помощью Firebase?

Также не следует ли вводить точный ник, как, например, iron, возвращать только одну запись?Нет учетной записи типа "iron2".Что здесь происходит?

1 Ответ

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

Когда вы выполняете запрос к базе данных Firebase, потенциально может быть несколько результатов.Таким образом, снимок содержит список этих результатов.По сути, он содержит три фрагмента информации: ключ каждого соответствующего дочернего элемента, значение каждого соответствующего дочернего элемента и порядок соответствующих дочерних узлов.

Когда вы вызываете r.val(), вы преобразуете вышеприведенное водин объект JSON, который имеет место только для ключей и значений.В этот момент вы теряете порядок между результатами.Для поддержания порядка следите за результатами с помощью встроенного метода DataSnapshot.forEach():

.then(snapshot => {
  var result = [];
  snapshot.forEach(child => {
    result.push(child.val());
  })
  return result;
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...