【问题标题】:Nested arrays are not supported不支持嵌套数组
【发布时间】:2017-10-05 20:07:14
【问题描述】:

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

【问题讨论】:

  • 有趣的是,这个文档建议支持嵌套数组。也许这是代码或文档中的错误? cloud.google.com/firestore/docs/manage-data/add-data#data_types
  • 你解决过这个问题吗?我遇到了同样的错误,使用 CodableFirebase。
  • @ProblemsOfSumit,您能否确认您是否能够保存 geoJSON。我仍然收到“FIRInvalidArgumentException”,原因:“不支持嵌套数组”

标签: firebase google-cloud-firestore


【解决方案1】:

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

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

后端有限制,只支持直接嵌套的数组。

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

没有公开的错误跟踪此问题,但我会在我们修复后回复。

【讨论】:

  • 只是为了跟进,这个问题已经解决了!
  • @MichaelLehenbauer 它仍然无法在 firebase 控制台上的 firestore UI 中使用。
  • 在 iOS 上仍然对我不起作用。我得到“FIRInvalidArgumentException”,原因:“不支持嵌套数组”。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    云防火墙

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

    【讨论】:

    • 在 4.6.1 中签入,仍然存在问题
    • 已经快5年了,还是一样的问题。
    • 我在 2022 年使用 Firebase 9.1 时仍然遇到此错误。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多