不支持嵌套数组

时间:2017-10-05 20:07:14

标签: firebase google-cloud-firestore

新的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 个答案:

答案 0 :(得分:7)

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

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

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

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

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

无法发表评论,请点击此处:4.6.0中已修复此问题,请参阅发行说明:https://firebase.google.com/support/release-notes/js#4.6.0

  

Cloud Firestore

     

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

答案 3 :(得分:0)

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数组,就像以前的答案一样,但是它们允许映射数组... of arrays:)

相关问题