Возможно, вы захотите немного сделать резервную копию и получить лучшее представление о типе базы данных Firestore. Это NoSQL, поэтому таких вещей, как строки, столбцы и таблицы, не существует.
Попробуйте это видео: https://youtu.be/v_hR4K4auoQ
и этот: https://youtu.be/haMOUb3KVSo
Но да, вы можете использовать облачную функцию, чтобы обновить значение для вас, или вы можете сделать новый расчет общего расхода в логике вашего приложения, и когда вы пишете новое значение для элемента 2, также пишите новое значение для потраченного Всего.
Но в основном вам нужно понять, как хранилище данных хранится в пожарном хранилище, и как взимается плата за его получение. С вас в основном взимается плата за каждый запрос на чтение / запись, и вы гораздо меньше заботитесь о фактическом объеме данных, которые вы сохранили в целом. Поэтому, вероятно, будет лучше НЕ хранить эти значения в отдельных коллекциях, если вы всегда будете использовать их одновременно.
Например:
Сбор (транзакции) => Документ (транзакция133453) {элемент 1: 80 долларов США, элемент 2: 70 долларов США, потраченный итог: 150 долларов США *
и затем, если вам нужно обновить эту транзакцию, вы просто обновите все значения для этого документа сразу, и это будет считаться только 1 операцией записи. Вы можете сохранить коллекцию транзакций как подколлекцию документа клиента или просто как собственную коллекцию. Но суть в том, что большинство рекомендаций, которые вы бы использовали для базы данных SQL с таблицами, столбцами и строками, на 100% не имеют значения для базы данных Firestore (NoSQL), поэтому вы должны полностью понять, что это значит, прежде чем начать планировать структуру вашей базы данных.
Надеюсь, это поможет !! Happy YouTubing ...
Редактировать в ответ на комментарий:
Мне нравится думать о том, как я собираюсь использовать данные, в отличие от того, что является наиболее логичным способом организации данных. Я не уверен, что понимаю контекст ваших примеров данных, но если бы я отслеживал бюджеты проектов или что-то в этом роде, я мог бы использовать что-то вроде скриншотов, которые я вставил ниже.
Поскольку у меня, вероятно, будет довольно ограниченное количество членов команды для каждого бюджета, которые можно будет сохранить в массиве в документе вместе со ВСЕМИ полями, относящимися к этому бюджету, - в основном все, что мне может понравиться например, показать на экране, который отображает детали бюджета. Потому что, когда вы делаете запрос, чтобы заполнить данные для этого экрана, если все, что вам нужно, все в одном документе, то вам нужно сделать только один запрос! Но если вы сохранили свои «заголовки» в одном документе, а затем «данные» в другом документе, теперь вам нужно сделать 2 запроса, чтобы заполнить 1 экран.
Тогда, возможно, на этом экране у меня есть ссылка на «Просмотр связанных транзакций», если пользователь нажимает на эту ссылку, вы вызываете запрос к вашей коллекции транзакций. Что-то вроде транзакций лучше всего хранить в коллекции, потому что вы, вероятно, не знаете, будет ли у вас 5 транзакций или 500. Если вы хотите показать, сколько всего транзакций было на вашей странице с подробной информацией о бюджете, вы можете добавить поле в вашем бюджете документа для "totalTransactions: (число)". Затем каждый раз, когда пользователь добавляет транзакцию, вы записываете подробности транзакции в соответствующую коллекцию транзакций, а также увеличиваете поле totalTransactions на 1 - это будет 2 записи в вашу базу данных. Firestore строится вокруг концепции, согласно которой пользователи, скорее всего, читают данные намного чаще, чем записывают данные. Поэтому делайте две записи, когда вы обновляете свои транзакции, но вам нужно только читать один документ каждый раз, когда вы просматриваете свой бюджет и хотите знать, сколько транзакций имело место.
То же самое для чатов. Но вы можете сделать чаты только вложенной коллекцией бюджетного документа, если хотите, чтобы чаты отображались только для одного бюджета за один раз. Если вы хотите, чтобы все ваши чаты размещались на одном экране, чтобы говорить обо всех бюджетах, вы, вероятно, захотите сделать свою коллекцию чатов на корневом уровне.
Что касается получения данных из документа, то это в основном объект JSON, поэтому (может незначительно отличаться в зависимости от того, в каком приложении вы работаете),
вложенный массив называется:
documentName.arrayName[index]
budget12345.teamMembers[1]
вложенный объект:
documentName.objectName.fieldName
budget12345.projectManager.firstName
И тогда подколлекция будет
collection(budgets).document(budget12345).subcollection(transactions)
FirebaseПример бюджетного документа
FirebaseExample остаток бюджета документа
FirebaseExample коллекция командных чатов
Коллекция транзакций FirebaseExample