Синтаксис для обновления документа Firestore путем добавления нового поля с «динамическим c именем» (React-Redux) - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь обновить документ Firestore, добавив новый «Массив вопросов» (содержащий детали вопроса внутри массива).

Я хотел бы назвать это новое «поле» внутри документа firestore, чтобы следовать согласованному соглашению об именах, значение которого изменяется динамически в зависимости от количества массивов вопросов в документе.

т.е. добавление 5-го массива вопросов в документ потребует текущего количества вопросов в документе (4) и прибавьте к нему 1 (получится 5). Затем он присоединит это значение к фактическому имени создаваемого нового поля (например, 'question / + (5) / = [question details]. Приведенный ниже код может прояснить, что я пытаюсь выполнить sh.

export const createFlashcardQuestion = (state) => {

    return (dispatch, getState, { getFirebase, getFirestore}) => {

         (...)
    
        const numberOfQuestions = state.numberOfQuestions;    <--- THIS IS THE VALUE I WANT TO REPLACE THE # with

        # = numberOfQuestions;                                <----- Placed here for clarity that this is the value trying to be ammended to the question array name.

        firestore.collection(...PATH BLAH BLAH...).update({   <----- I SIMPLIFIED THE PATH JUST FOR THIS QUESTION
            numberOfQuestions: numberOfQuestions,             <---- THIS IS THE NEW # OF QUESTIONS
            lectureUpdatedAt: new Date(),
            question#: [state],                               <-------- THIS IS THE LINE I AM STRUGGLING. I want the "#" to somehow equal the interger value found in "numberOfQuestions".
            

        }).then(() => {

            (...Dispatch and Thunk Mumbo Jumbo...)

    
};

1 Ответ

0 голосов
/ 02 августа 2020

НАЙДЕНО РЕШЕНИЕ:

Итак, после дальнейшего исследования я нашел единственное решение этой проблемы - отрегулировать то, что вызывается. вместо того, чтобы пытаться динамически назвать поле, просто передайте «ключ» в качестве имени одного из объектов в массиве объектов (массив объектов называется «вопросы»). Массив объектов, каждый индекс которого содержит объект «состояние», который содержит детали вопроса.

Это решение требует 2 обновления документа; 1, чтобы добавить новый объект вопроса в документ, и еще одно обновление, чтобы внести изменения в уже существующие поля в документе.

export const createFlashcardQuestion = (state) => {

    return (dispatch, getState, { getFirebase, getFirestore}) => {

         (...)
    

        const key = state.numberOfQuestions;

        var newQuestion = {};
        newQuestion[`questions.${key}`] = {
            state
        };

        firestore.collection(...PATH BLAH BLAH...).update(
            newQuestion)

        firestore.collection(...PATH BLAH BLAH...).update({
            numberOfQuestions: numberOfQuestions,
            lectureUpdatedAt: new Date(),
            

        }).then(() => {

            (...Dispatch and Thunk Mumbo Jumbo...)

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