У меня проблема с запросом вложенных данных из базы данных Firebase Realtime.
Учитывая следующую структуру данных примера:
"crossing":
"1346":
"data1": "value"
"data2": "value"
"projectName": "PN-1"
"1562":
"data1": "value"
"data2": "value"
"projectName": "PN-1"
"1933":
"data1": "value"
"data2": "value"
"projectName": "PN-2"
Предположим, что в этой коллекции будут сотни детей , Кроме того, идентификатор является случайным и неизвестным до времени выполнения запроса. Каждое пересечение имеет несколько других значений, как вы можете видеть на картинке.
Сначала я должен был перечислить все пересечения, чья клавиша начинается с заданного значения. Так, например, если я ищу «1», я хотел бы получить все пересечения в этом простом примере.
Этот фрагмент кода решает эту проблему. Хотя я до сих пор не уверен, что это лучший способ добиться этого.
firebase
.database()
.ref("crossing")
.orderByKey()
.startAt(self.searchedKey)
.endAt(self.searchedKey + "\uf8ff")
.once("value", function(snapshot) {
if (snapshot.val()) {
console.log(snapshot.val());
}
});
Моя главная проблема заключается в том, что теперь мне нужно перечислить все пересечения, чье значение projectName начинается с заданного значения.
Однако я не могу составить правильный запрос для этого. Я не могу использовать функцию .orderByChild () , поскольку дочерние ключи (идентификаторы) неизвестны.
Я не могу позволить себе запрашивать все пересечения из коллекции и перебирать все элементы на стороне внешнего интерфейса, поскольку позже этот объект будет огромным с большим количеством пересечений. Как я вижу, какой-то порядок все еще необходим.