【问题标题】:How to Update an array without downloading all data from firebase ReactJs如何在不从 firebase ReactJs 下载所有数据的情况下更新数组
【发布时间】:2019-10-27 16:15:51
【问题描述】:

实际上是 react 新手,我正在尝试创建一个用户可以加入事件的事件应用程序 这是加入活动的代码

export const JoinEvent = (id) => {
  return async dispatch => {
    let data = await firebase.firestore().collection('Events').doc(id).get()
    let tmpArray = data.data()
    let currentUser = firebase.auth().currentUser
    let newArray = tmpArray.PeopleAttending


    await firebase.firestore().collection('Events').doc(id).update({
      PeopleAttending : {...newArray, [currentUser.uid]: {displayName : currentUser.displayName}}
    })

  }
}

实际上我已经在 J​​oinEvent 中创建了一个动作,一个被点击的特定事件的 id 被传递。

这是我的firestore结构看起来像这样..

所以基本上我必须下载整个数据并存储在本地数组中,然后添加新用户,然后最后更新 所以这里基本上是下载整个数据有没有办法简单地添加新对象而不下载整个数据? 谢谢你

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    你做错了。 Firestore 文档大小限制为 Maximum size for a document 1 MiB (1,048,576 bytes),因此,如果您继续添加这样的数据,迟早会达到该限制。您似乎不会达到该限制,但以这种方式存储数据是非常不安全的。你可以查看Firestore query using an object element as parameter如何查询firestore文档中的对象,但我建议你不要那样做。

    正确的做法是在Events 集合内的每个文档上创建一个子集合PeopleAttending,然后使用该集合来存储数据。

    您也可以尝试使用mergemergeFields 记录set,就像这里记录的https://googleapis.dev/nodejs/firestore/latest/DocumentReference.html#set 和这里https://stackoverflow.com/a/46600599/1889685 一样。

    【讨论】:

    • 我实际上在事件集合中创建了 PeopleAttending 我更新我的问题检查我的数据库结构,但我想知道数据是否有其他方法可以在不下载整个数据的情况下更新数据
    • 我仍然将PeopleAttending 视为SuWja... 文档的一个字段。你试过setmerge 选项吗?
    猜你喜欢
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多