Есть ли способ запросить коллекцию Firestore, чтобы узнать, сколько раз встречается значение поля? - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь выполнить запрос к коллекции таким образом, чтобы:
1. Я мог узнать, сколько раз значение true встречается во всех документах
enter image description here

Например, есть ли способ проверить каждый документ и запросить поля документа, соответствующие true?

После этого запишите, сколько раз значение true встречается в переменной.

Ответы [ 2 ]

3 голосов
/ 20 января 2020

Существуют разные возможные подходы:

1. Получить все документы с полем TransmitterError == true

Вы можете написать запрос, который будет возвращать все документы и использовать свойство size QuerySnapshot:

db.collection("Londiani Hill").where("TransmitterError", "==", true)
    .get()
    .then(function(querySnapshot) {
        console.log(querySnapshot.size);
    })
    .catch(function(error) {
        console.log("Error getting documents: ", error);
    });

Проблема этого подхода заключается в том, что вы читаете все документы с полем TransmitterError = true каждый раз, когда хотите их подсчитать , и это имеет свою стоимость.

2. Ведение счетчика

Вы можете увеличивать счетчик каждый раз, когда создаете документ с полем TransmitterError = true (и уменьшать его, если удаляете do c или изменяете значение TransmitterError на false) , Вам нужно будет поддерживать один счетчик на коллекцию.

Для реализации счетчика вы можете использовать Распределенный счетчик на коллекцию ИЛИ использовать один документ "счетчик" на коллекцию, где у вас есть поле счетчика. что вы увеличиваете с firebase.firestore.FieldValue.increment(), см. do c.

Критерием выбора между двумя типами счетчика является количество обновлений счетчика для определенной коллекции c: фактически, в Cloud Firestore, вы можете только обновлять один документ примерно раз в секунду . Поэтому, если вы знаете, что документы счетчика могут обновляться чаще, чем раз в секунду, вам следует выбрать подход распределенных счетчиков, в противном случае вы можете полагаться на один встречный документ на коллекцию.

2 голосов
/ 20 января 2020

Может ли это помочь вам решить проблему

db.collection("Londiani Hill").where("TransmitterError", "==", true).get().then(function(querySnapshot) {      
    console.log(querySnapshot.size); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...