Как применить лимит и startAt к дочерним элементам документа FireStore - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь применить нумерацию страниц в пожарном магазине, мне нужно взять первые 5 предметов (всего 200 предметов) из массива предметов в моих шляпах до c из коллекций коллекций, а затем при следующем щелчке мне нужно получить следующие 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.

Это моя база данных:

enter image description here

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

enter image description here

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

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

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

1 Ответ

3 голосов
/ 28 марта 2020

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

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

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