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