Решение состоит в том, чтобы просто изменить структуру данных и запрос для нужного вам индекса.
Учитывая набор данных (да, плохой вид на «индексы»)
"dinos" :
{
"0": {
"name": "lambeosaurus":
"height" : 2.1,
"length" : 12.5,
"weight": 5000
},
"1": {
"name": "stegosaurus":
"height" : 4,
"length" : 9,
"weight" : 2500
}
}
Теперь у вас есть много гибкости:
Если вы знаете «индекс» число 0, 1 и т.д., вы можете прямо читать у ребенка. Таким образом, чтобы получить Дино на «индекс» # 1:
Firebase *allDinosRef = [rootRef [email protected]"dinos"];
Firebase *aDinoRef = [allDinosRef [email protected]"1"];
[aDinoRef observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {
//do something with the dino index #1 data
}];
Вы можете также запросить конкретное название динозавра, а затем получить его родителей, чтобы вы знали бы, это индекс.
Альтернативы является кредитным плечом другой структуры
"dinos" :
{
auto_generated_id: {
"name": "lambeosaurus":
"height" : 2.1,
"length" : 12.5,
"weight": 5000
"index": "0"
},
auto_generated_id: {
"name": "stegosaurus":
"height" : 4,
"length" : 9,
"weight" : 2500
"index": "1"
}
}
auto_generated_id является Firebase идентификатора, который будет сгенерирован с помощью childByAutoId
Используя эту структуру, можно составить простой запрос, чтобы получить Дина на индекс #, который вас интересует.
FQuery *allDinos = [rootRef queryOrderedByChild:@"index"];
FQuery *specificDino = [allDinos queryEqualToValue:@"1"];
[specificDino observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {
//do something with Dino at 'index' 1
}];
Это обеспечивает дополнительную гибкость в том, что вы можете легко изменить порядок вставки динозавра и т. д. не выписывая целую кучу данных - просто меняются индексы.
ближайший ответ, который я нашел, был в этом сообщении в блоге, но на самом деле он не объясняет, как найти объект. https://www.firebase.com/blog/2014-04-28-best-practices-arrays-in-firebase.html – unfollow
Пример, который вы опубликовали, не похож на массив - массив будет использовать квадратные скобки [] вокруг коллекции и обертывания каждого элемента в фигурных скобках для создания объектов, при этом lambeosaurus и stegosaurus продолжают оставаться свойствами имени. Это данные, которые вы вложили или что вы получили? Как упоминалось в ссылке Unfollow, Firebase управляет структурой массивов ... –
Похоже, Firebase принимает объекты JSON и преобразует их в структуры данных объекта, содержащие «дочерние» объекты. я не уверен в точной номенклатуре структуры данных FB, но разве не все еще можно найти дочерние объекты на основе их положения в родительском объекте? – unfollow