18

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

4

4 回答 4

20

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

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

后端的限制是不支持直接嵌套的数组。

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

没有公开的错误跟踪,但当我们有修复时我会发回。

于 2017-10-05T23:16:31.230 回答
10

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

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

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

于 2017-10-08T05:34:51.317 回答
4

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

云防火墙

FIXED 修复了嵌套数组的验证以允许间接嵌套。

于 2017-10-23T06:06:23.417 回答
1

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 不允许二维数组,就像以前的答案所指出的那样,但它们允许地图数组......数组:)

于 2020-07-13T15:56:50.270 回答