将数组上传到 Firestore
Posted
技术标签:
【中文标题】将数组上传到 Firestore【英文标题】:Uploading an Array to Firestore 【发布时间】:2020-11-08 01:43:30 【问题描述】:我正在尝试将一个数组从我的应用程序上传到 Firestone。但是,它继续显示
“firebaseError: function fieldvalue.arrayUnion()”使用无效数据调用。
这是我的代码:
const finalList = this.state.players.map(player =>
if(player.Present === true)
return player.id
)
finalList.map( id =>
dbh.collection("Groups").doc(this.state.group)
.collection('Enrolled').doc('ids').update(
players: firebase.firestore.FieldValue.arrayUnion(id)
)
)
请注意,数据库中尚不存在数组“玩家”。
【问题讨论】:
尝试将 id 和 player 括在括号中。类似(player) =>
和(id)=>
您好,感谢您的回复,很遗憾您的回复无效
我假设 finalList 是 id
s 的列表 - 为什么不简单地发送它而不是 map 函数?
dbh.collection("Groups").doc(this.state.group) .collection('Enrolled').doc('ids').update( players: firebase.firestore.FieldValue.arrayUnion(finalList) )
不幸的是,这会产生类似的错误“function.field value.arrayUnion() 调用无效数据。不支持嵌套数组。我相信在这种情况下,它会将其解释为将数组放置在数组播放器的元素。
【参考方案1】:
您的 id
变量似乎是一个 ID 数组,而 arrayUnion
函数需要一个可重复的变量。
要转换类型,可以使用...
操作:
finalList.map( id =>
dbh.collection("Groups").doc(this.state.group).collection('Enrolled').doc('ids').update(
players: firebase.firestore.FieldValue.arrayUnion(...id)
)
)
另外,更通用的是,您可以使用以下方式执行转换:
firebase.firestore.FieldValue.arrayUnion.apply(null, id);
有关更多信息,请参阅 Gil 在此 post to the firebase-talk mailing list 中的回答。
【讨论】:
【参考方案2】:您还可以使用我在相关 cmets 上讨论过的带有合并方法的集合
除此之外你可以使用
const finalList = this.state.players.map(player =>
if(player.Present === true)
return player.id
)
dbh.collection("Groups").doc(this.state.group)
.collection('Enrolled').doc('ids').update(
players: firebase.firestore.FieldValue.arrayUnion(...finalList)
)
您可以从Matthew Rideout的回答中获取详细信息
【讨论】:
以上是关于将数组上传到 Firestore的主要内容,如果未能解决你的问题,请参考以下文章
快速多部分/表单数据上传,将字符串数组附加到正文(问题:数组作为字符串到服务器)
成功将文件上传到MySQL中的字节数组,但是下载时内容不可读
Angular + core 如何将文件数组从 Angular 上传到 Dot Net Core