Сводные значения Firebase по свойству без выборки всех соответствующих документов - PullRequest
2 голосов
/ 05 ноября 2019

У меня есть следующая структура Firebase:

{
    "company1": {
        "name": "Company One",
        "invoices": {
            "invoice1": {
                "amount": 300,
                "currency": "EUR",
                "timestamp": 1572608088
            },      
            "invoice2": {
                "amount": 460,
                "currency": "EUR",
                "timestamp": 1572608088
            }
        }
    }   
}

То есть: у меня есть коллекция companies. Есть документ для каждой компании. У каждой компании есть подколлекция invoices.

Каждый счет имеет свойства amount, currency, timestamp.

Существует ли эффективный способ получения суммы всех сумм? счетов компании без необходимость получить все соответствующие документы из пожарного магазина? Это был бы подход, который я придумал, который был бы довольно неэффективным:

this.afs.collection('companies').document('company1').collection('invoices', ref => ref.where('timestamp', '>', 1556710488).where('timestamp', '>', 1572953978))

Я не могу просто использовать облачную функцию для увеличения значения, поскольку запрошенный период времени неизвестен.

1 Ответ

0 голосов
/ 05 ноября 2019

Существует ли эффективный способ получения суммы всех сумм счетов компании без необходимости извлечения всех соответствующих документов из Firestore?

Да, вы можете добавить новыйсобственность в документе вашей компании с именем totalAmount, где вы можете хранить общую сумму всех ваших счетов. Каждый раз, когда вы добавляете новый счет, просто увеличивайте totalAmount на сумму нового счета. Теперь, чтобы получить значение этого нового свойства, необходимо прочитать один документ. Используя это решение, вы будете платить только за одну операцию чтения и не с общим количеством счетов, которые у вас есть во вложенной коллекции счетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...