Firebase orderByKey (). StartAt () не работает должным образом. В чем дело?

Предполагая, что у вас есть только переменные, а не какие-либо функции в вашем объекте, вы можете просто использовать:

var newObject = JSON.parse(JSON.stringify(oldObject));
1
задан Frank van Puffelen 24 March 2019 в 20:28
поделиться

2 ответа

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

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.

Справочно:

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

0
ответ дан Peter Haddad 24 March 2019 в 20:28
поделиться

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

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

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

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

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

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

0
ответ дан Frank van Puffelen 24 March 2019 в 20:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: