不支持嵌套数组

Nested arrays are not supported

新的 Firebase 数据库 Firestore 说

Function DocumentReference.set() called with invalid data. Nested arrays are not supported.

尝试保存以下对象时:

{
  "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 对象 - 我将如何保存它?

更新:这已在 Firebase JS SDK 4.6.0 中修复。 直接仍然不支持嵌套数组,但您现在可以拥有一个包含一个对象的数组,该对象包含一个数组等

这是当前发布的 SDK 中的错误。

后端限制只支持直接嵌套数组

在您的情况下,您的数组包含包含数组的对象,并且客户端中的验证逻辑在不应该的时候不允许它。

没有 public 错误跟踪此问题,但我会 post 修复后返回。

您可以采用序列化函数,将具有对象类型的数组转换为映射。键可以是数字以保持顺序。

{ 1: Object, 2: Object2 ... }

在反序列化时,您可以获得 Object.values(data); 将其放回数组中以供客户端使用。

无法评论所以就这样吧:这在 4.6.0 中已修复,请参阅发行说明:https://firebase.google.com/support/release-notes/js#4.6.0

Cloud Firestore

FIXED Fixed the validation of nested arrays to allow indirect nesting.

Python:

# Matrix storage in firestore

def matrix_to_fb_data(matrix):
    return [{'0': row} for row in matrix]

def fb_data_to_matrix(fb_data):
    return [row['0'] for row in fb_data]

Firestore 不允许二维数组,就像之前的答案所指出的那样,但它们允许地图数组...数组:)