Вложенные массивы не поддерживаются

Новая база Firebase Firestore сообщает

Функция DocumentReference.set() вызвана с недопустимыми данными. Вложенные массивы не поддерживаются.

При попытке сохранить следующий объект:

{
  "desc" : "Blala",
  "geojson" : {
    "features" : [ {
      "geometry" : {
        "coordinates" : [ 8.177433013916017, 48.27753810094064 ],
        "type" : "Point"
      },
      "type" : "Feature"
    } ],
    "type" : "FeatureCollection"
  },
  "location" : {
    "lat" : 48.27753810094064,
    "lng" : 8.177433013916017
  },
  "name" : "Wald und Wiesen",
  "owner" : "8a2QQeTG2zRawZJA3tr1oyOAOSF3",
  "prices" : {
    "game" : {
      "Damwild" : 10,
      "Raubwild" : 300,
      "Rehwild" : 250,
      "Schwarzwild" : 40
    },
    "perDay" : 35
  },
  "rules" : "Keine Regeln!",
  "wild" : {
    "desc" : "kein Wild",
    "tags" : [ "Damwild", "Rehwild", "Schwarzwild", "Raubwild" ]
  }
}

что именно представляет собой вложенный массив, о котором жалуется firestore? Я не могу найти его в документации.

Если это объект GeoJSON - как бы я его сохранил?

Ответ 1

ОБНОВЛЕНИЕ: это было исправлено в Firebase JS SDK 4.6.0. Непосредственно вложенные массивы все еще не поддерживаются, но теперь вы можете иметь массив, содержащий объект, который содержит массив и т.д.

Это ошибка в выпущенных в настоящее время SDK.

Бэкэнд имеет ограничение, что только напрямую вложенные массивы не поддерживаются.

В вашем случае у вас есть массивы, содержащие объекты, содержащие массивы, и логика проверки в клиентах запрещает это, когда это не должно.

Там нет общедоступной ошибки отслеживания этого, но я отправлю обратно, когда у нас будет исправление.

Ответ 2

Вы можете адаптировать функцию сериализации, которая преобразует массивы с типами объектов в карту. Клавиши могут быть числовыми, чтобы поддерживать порядок.

то есть. { 1: Object, 2: Object2 ... }

При десериализации вы можете вернуть Object.values(data); обратно в массив, который будет использоваться на стороне клиента.

Ответ 3

Не могу комментировать, так вот: это исправлено в 4.6.0, см. примечания к выпуску: https://firebase.google.com/support/release-notes/js#4.6.0

Облако Firestore

FIXED Исправлена ​​проверка вложенных массивов для обеспечения косвенной вложенности.