Как применить лимит и startAt к дочерним элементам документа FireStore

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

testPagination = async () => {

    const { currentPage, itemsPerPage } = this.state;
    const { fetchCollectionsForPagesStart, match : { params } } = this.props;
    const collectionId = params.collectionId;

    const startAt = currentPage * itemsPerPage - itemsPerPage;

    const docs =  await firestore.collection("collections").orderBy('id').startAt(0).limit(itemsPerPage).get();
    const data = docs.docs;

    const items = docs.forEach( async docItem => {
        console.log(await docItem.data());
    })
}

я запускаю эту функцию, когда я нажимаю кнопку в моей функции рендера внутри реагировать,

render()
{
    return (
        <button onClick={this.testPagination}>Test pagination </button>
    );
}

но я всегда получаю 200 элементов в моем результате, так как мне применить startAt () и limit () к массиву элементов в firestore.

Это моя БД:

введите описание изображения здесь

Это console.log (await docItem.data ()); дает мне

введите описание изображения здесь

NB: я получаю идентификатор документа для шапки, так что если есть способ получить доступ к шапке с идентификатором, я бы тоже хотел помочь

const docs = await firestore.doc(`collections/${collectionId}`).get();
const data = await docs.data();

Но это не позволяет мне применять startAt () и limit ()

Всего 1 ответ


В вашей базе данных hats - это документ collections коллекций. В Firestore вы не можете принести часть документа (например, 5 элементов из массива items ), всегда приносит весь документ, и он считается за одно чтение в Firestore. Если вы хотите сделать разбиение на страницы на массиве items вы должны создать подколлекцию в hats с данными об items . Имея эту структуру, вы можете выполнить startAtQuery() с limit() 5 документов, который в этом случае считается как 5 операций чтения в Firestore.

Вы можете увидеть все о модели данных Firestore здесь: https://firebase.google.com/docs/firestore/data-model


Есть идеи?

10000