firebase 不支持嵌套数组

lo8azlld  于 2023-11-21  发布在  其他
关注(0)|答案(6)|浏览(153)

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

iih3973s

iih3973s1#

(in如果有人在Google上找到这个问题)
我在Firebase Admin中遇到此错误,但此**answer**帮助了我
不正确:

import * as admin from "firebase-admin"

document.ref.update({
   "arrayFieldName": admin.firestore.FieldValue.arrayRemove(arrayOfStringToRemove)
});

字符串
为了解决这个问题,我修改了spread语法:

document.ref.update({
   "arrayFieldName": admin.firestore.FieldValue.arrayRemove(...arrayOfStringToRemove)
});

4c8rllxm

4c8rllxm2#

最新消息:这在Firebase JS SDK 4.6.0中得到了修复。* 直接 * 嵌套数组仍然不受支持,但现在您可以拥有一个数组,该数组包含一个包含数组的对象,等等。
这是当前发布的SDK中的一个bug。
后端有一个限制,即只支持直接嵌套的数组。
在你的例子中,你有一个数组,其中包含了包含数组的对象,而客户端的验证逻辑在不应该允许的时候禁止它。
没有公开的bug跟踪这个问题,但我会在我们有修复的时候回来。

kg7wmglp

kg7wmglp3#

你可以使用一个序列化函数,将带有对象类型的数组转换成一个Map。键可以是数字以保持顺序。
{ 1: Object, 2: Object2 ... }
在格式化时,您可以将Object.values(data);放回数组中,以便在客户端使用。

moiiocjp

moiiocjp4#

无法发表评论,所以在这里它去:这是固定在4.6.0,请参阅发行说明:https://firebase.google.com/support/release-notes/js#4.6.0
Cloud Firestore
修正了嵌套数组的验证以允许间接嵌套。

z0qdvdin

z0qdvdin5#

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数组,就像前面的答案已经指出的那样,但它们允许数组的Map.数组:)

ifmq2ha2

ifmq2ha26#

你可以选择插入一个带有嵌套数组和字符串格式的对象的文档;对我来说,在JavaScript中,它是:

JSON.stringfiy(someNestedObject);

字符串

相关问题