Firebase orderByKey (). StartAt () не работает должным образом.В чем дело? - PullRequest
1 голос
/ 24 марта 2019

Я пытаюсь получить данные Firebase от узла, который должен начинаться с переданной строки.

Я пробовал код, но всегда получаю одни и те же данные.Данные базы данных следующие:

enter image description here

И я использую следующий код:

var ref = firebase.database().ref("restaurantes/history");
    ref.orderByKey().startAt(userUID).once("child_added", function(snapshot) {
      snapshot.forEach(child => {
        if(child.key == "orders")
        {
          console.log(child.val());

          _.each(child.val(), (value, key) => {
            arrtmp.push(value)
          })
        }    

      })

Если пользователь "FKQLlqa "Я должен получить данные истории, показанные на картинке.Если я пользователь "abc", я не должен получать никаких данных.Но я всегда получаю данные, показанные на картинке.Должен ли я использовать другой способ запроса?Или мне следует использовать ключевое поле внутри данных о заказах и платежах?

С уважением!

Ответы [ 2 ]

2 голосов
/ 24 марта 2019

Попробуйте следующее:

var ref = firebase.database().ref("restaurantes/history");
ref.child(userUID).once("value", function(snapshot) {
  if (snapshot.exists()) {
      console.log(snapshot.val());
    }
  else {
      console.log("different user");    
  });

Это проверит, существует ли в базе данных моментальный снимок, содержащий userId (добавленный в качестве параметра в методе child()), и вы сможете получить данные в соответствии с userId. * 1007. *

Для справки:

https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot#exists

1 голос
/ 24 марта 2019

Правильный ответ Питера. Я просто добавляю это для полноты.

Когда вы вызываете orderBy... для ссылки Firebase, база данных упорядочивает все дочерние узлы наключ / значение / дочерний элемент, который вы указываете.

Если вы впоследствии вызовете startAt(...) для запроса, он находит (первый) узел, который начинается с этого значения, и запускает , возвращая все результаты оттуда.Поэтому, если вы начнете с FKQLlqa, он начнет возвращать ключи с FKQLlqa, а затем вернет все ключи после него.

Если вы хотите вернуть дочерний узел (узлы) сконкретный ключ / значение / дочерний элемент, вы бы использовали equalTo(...).Итак:

ref.orderByKey().equalTo(userUID).once("child_added", function(snapshot) {
  ... 

Но, как уже сказал Питер, это просто более дорогой способ найти ребенка с известным ключом.Я настоятельно рекомендую использовать его лучший подход: ref.child(userUID).once("value".

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