Я не знаю Swift, поэтому мои примеры приведены в Dart, но методы, на мой взгляд, похожи.
Во-первых, я бы разделил узел Users на два. Один для хранения пользовательских данных, который обычно довольно статичен c, а другой для хранения дневников. Вы бы использовали тот же ключ UID, что и оба. Таким образом, вам придется меньше беспокоиться о вложенности, и, следовательно, гораздо проще CRUD-данные. Если вы используете Firebase для аутентификации своих пользователей, я бы использовал уникальный ключ, который Firebase создает для каждого пользователя, в качестве ключей для этих двух узлов.
Затем ...
Чтобы создать пользователя запись узла данных код Dart будет выглядеть примерно так:
referenceUserData.child(<authenticated user id>).set({
"age": <age value>,
"email": <email value>,
"name": <name value>,
});
Чтобы создать запись объекта узла дневника пользователя, код Dart будет выглядеть примерно так:
referenceUserData.child(<authenticated user id>).child(<diary key>).child(<diary object key>).set({
"object info value 1": <object value>,
"object info value 2": <object value>,
"object info value 3": <object value>,
});
Вы также можете создать все объект записывает сразу, записывая их в виде списка (массива) с помощью .set ().
Вам также необходимо решить, каким должен быть ваш ключ дневника. Вы можете использовать Firebase для генерации уникального ключа, используя .push().set()
.
Для чтения, например. пользовательские данные, тогда ваш звонок может быть:
referenceUserData
.child(<authenticated user id>)
.once()
.then(
(DataSnapshot snapshot) {
print(snapshot.key);
if (snapshot.value != null) {
print(snapshot.value);
<code to process your snapshot value>
}
};
Кстати, «приоритет» унаследован с первых дней существования Firebase RTDB, поэтому я бы не стал его использовать.