при входе консультанта у меня нет никакой возможности определить, в какую категорию он входит. Поэтому я не могу изменить статус онлайн узла консультанта
Это действительно суть вашего вопроса. проблема, и сразу же суть решения.
При использовании базы данных № SQL вы должны смоделировать свои данные, чтобы разрешить ваши варианты использования. Поэтому, если ваша текущая структура не позволяет вам найти категорию для известного счетчика [sic]), вам следует либо изменить структуру, чтобы разрешить это, либо добавить дополнительные данные.
Например, я ' Рассмотрим следующие варианты:
Сохранение получателей в виде списка
На первый взгляд ваш JSON в councilers
выглядит более глубоко вложенным, чем необходимо. Если вы смоделируете это следующим образом:
"councilers" : {
"COUNCILER2" : {
"description" : "peter test description",
"email" : "peter123@test.com",
"name" : "peter smith",
"online" : true,
"phone" : "0773453323",
"category": "EDUCATIONAL"
}
"jFufY3heXJgHbnuVeA9Ez1zH8ug2" : {
"description" : "test description",
"email" : "johndoe123@test.com",
"name" : "john smith",
"online" : false,
"phone" : "0770230006",
"category": "FAMILY"
},
"COUNCILER3" : {
"description" : "test description",
"email" : "willsmith123@test.com",
"name" : "will smith",
"online" : true,
"phone" : "0770230006",
"category": "FAMILY"
}
},
Используя указанную выше структуру, вы все равно можете получить счетчики в правильном порядке с помощью firebase.database().ref("councilers").orderByChild("category")
, но теперь каждый консультант также может найти свой собственный узел и обновить свой online
статус.
Сохранение дополнительного сопоставления от консультанта к его категории
В вашей текущей структуре вы можете легко найти консультантов для определенной c категории. Однако вы не можете легко найти категорию для конкретного c консультанта, который вам сейчас нужен.
Одним из возможных решений является добавление этого указанного c отображения в вашу базу данных в качестве дополнительного топ- список уровней:
"counciler_categories": {
"jFufY3heXJgHbnuVeA9Ez1zH8ug2": "EDUCATIONAL",
"COUNCILER2": "FAMILY",
"COUNCILER3": "FAMILY"
}
Теперь вы можете найти категорию для консультанта, а затем обновить его статус в /councilors/$category/$uid
.
Сохранить онлайн-статус отдельно от других данных
Другой вариант - разделить статус на свой собственный узел верхнего уровня, введенный с помощью UID консультанта:
"counciler_online": {
"jFufY3heXJgHbnuVeA9Ez1zH8ug2": true,
"COUNCILER2": false,
"COUNCILER3": true
}
Итак, с помощью этой дополнительной структуры вы удалите online
свойство от каждого /councilers/$category/$uid
узла, и теперь консультанты могут обновлять только свой статус, когда они в сети.
Возможно, вариантов даже больше, чем только три общих, которые я обрисовал выше, и ни одного из них уместно лучше, чем другие. Вам нужно будет выбрать, что работает для вариантов использования в вашем приложении, и изменить, когда вы go впереди.
Я настоятельно рекомендую прочитать Нет SQL моделирование данных , смотреть Firebase для SQL разработчиков и Знакомство с Cloud Firestore (последняя относится к другой базе данных, но большая часть рекомендаций в ранних эпизодах в равной степени относится и к другим No SQL базы данных).