Firestore массовое добавление поля в массив - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь добавить поле на карту в массиве. Я пытаюсь добавить "canAssist": false к каждому map в массиве для каждой из стран.

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

[
  {
    "Afghanistan": {
      "country": "Afghanistan",
      "countryCode": "AF",
      "countryCodeAlt": "AFG",
      "emoji": "??",
      "packages": [
        {
          "name": "Luxury Couple",
          "cost": "$2000.00",
          // I want to add canAssist:false here!
        },
        {
          "name": "Quick Retreat",
          "cost": "$1000.00",
          // I want to add canAssist:false here!
        }
      ]
    }
  },
  {...}
  {...}
]

Вот что я пробовал:

let travelData = database.collection('countries').doc(docName);

travelData.get()
    .then(function(querySnapshot) {
        querySnapshot.forEach(function(array) {
            packages.map(package => {
                return package.add({
                    canAssist: false
                });
            })
        });
    });

1 Ответ

1 голос
/ 03 февраля 2020

Вы можете использовать Object.values ​​() и деструктуризацию объекта для достижения этой цели.

    const querySnapshot = [
      {
        Afghanistan: {
          country: 'Afghanistan',
          countryCode: 'AF',
          countryCodeAlt: 'AFG',
          emoji: '??',
          packages: [
            {
              name: 'Luxury Couple',
              cost: '$2000.00',
              // I want to add canAssist:false here!
            },
            {
              name: 'Quick Retreat',
              cost: '$1000.00',
              // I want to add canAssist:false here!
            },
          ],
        },
      },
      {
        ...
      },
      {
        ...
      },
    ];

    const updateSnapshot = (snapshot, newData) => {
      return snapshot.map(countryData => {
        // only one field with the name of the country
        const country = Object.values(countryData)[0];

        let updatedCountry = { ...country };
        const field = country[newData.field];
        if (field) {
          if (typeof field === 'string') {
            updatedCountry[newData.field] = newData.values;
          } else if (Array.isArray(field)) {
            updatedCountry[newData.field] = field.map(data => ({ ...data, ...newData.values }));
          }
        }
        return { [updatedCountry.country]: updatedCountry };
      });
    };

    (() => {
      console.log('Original', JSON.stringify(querySnapshot, null, 4));
      const updatedSnapshot = updateSnapshot(querySnapshot, { field: 'packages', values: { canAssist: false } });
      console.log('Updated', JSON.stringify(updatedSnapshot, null, 4));
      const updatedSnapshot2 = updateSnapshot(querySnapshot, { field: 'emoji', values: '??' });
      console.log('Spanish!', JSON.stringify(updatedSnapshot2, null, 4));
    })();

Конечно, вам не нужен этот динамизм с 'newData', я просто добавил, если вы хотите поиграть с любым полем вашего источника данных.

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