Подтвердить что ты не робот

Запросить все документы в коллекции Firestore без цикла

Я работал над переходом небольшого проекта Firebase в новый, похожий на Firestore db из-за его более интересного характера, но у меня проблемы с простой проблемой запроса.

Я пытаюсь получить все документы в коллекции, в случае, если каждый документ является клубом, а коллекция - это все клубы.

В Firebase я смог сделать что-то вроде:

export function fetchClubs() {
    const Club = firestore.ref('clubs');
    return dispatch => {
        Club.on('value', snapshot => {
            dispatch({
                type: FETCH_CLUBS,
                payload: snapshot.val()
            })
        })
    }
}

snapshot будет иметь всю необходимую мне информацию внутри него.

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

Вот моя попытка Firestore с использованием немного отличающегося синтаксиса Firestore

export function fetchClubsStore() {
    const Clubs = firestore.collection('clubs');
     return dispatch => {
        Clubs.get().then(querySnapshot => {
            console.log("clubs snapshot: ", querySnapshot)
            dispatch({
                type: FETCH_CLUBS,
                payload: querySnapshot.val()
            })
        })
    }
}

Если у вас есть какие-либо идеи, вся помощь будет принята с благодарностью! Спасибо!

(это мой первый пост stackoverflow, иди просто! :))

Редактировать:

Пример из документов Firestore о том, как получить все документы в коллекции.

db.collection("cities").where("capital", "==", true)
.get()
.then(function(querySnapshot) {
    querySnapshot.forEach(function(doc) {
        console.log(doc.id, " => ", doc.data());
    });
})
.catch(function(error) {
    console.log("Error getting documents: ", error);
});

Изменить 2:

Мое новое решение для получения документов в полезном массиве с помощью.docs и.data(). Все еще кажется неэффективным, так как мне приходится перебирать документы и извлекать полезную информацию по одному.

export function fetchClubsStore() {
const Clubs = firestore.collection('clubs');
var clubs = [];
return dispatch => {
    Clubs.get().then(querySnapshot => {
        console.log("clubs snapshot: ", querySnapshot.docs)
        _.each(querySnapshot.docs, function(data){
            clubs.push(data.data());
        })
        dispatch({
            type: FETCH_CLUBS,
            payload: clubs
        })
    })
}

}

4b9b3361

Ответ 1

Разница между базой данных Firebase Realtime и Firestore заключается в том, что RTDB - это просто объект JSON, размещенный в облаке. Таким образом, нет концепции документов и нет коллекций данных.

Объект значения в снимке запроса, полученном из RTDB, является просто объектом JSON. Следовательно, вы можете получить доступ к узлам первого уровня по их ключам (а также к узлам любого уровня по их ключам)

Если вы пришли из RTDB, вы заметите разницу в том, что Cloud Firestore имеет коллекции и документы. Таким образом, результаты вашего запроса по своей сути будут коллекциями данных, а не объектом JSON. Документы, полученные из запроса, не могут быть получены как один большой объект JSON.

Циклы по результату запроса - это правильный способ работы с Cloud Firestore.