【问题标题】:Firestore: How to store data back again in the right documents after fetching data from multiple documentsFirestore:从多个文档中获取数据后如何将数据重新存储在正确的文档中
【发布时间】:2022-02-14 03:42:19
【问题描述】:

在我的应用程序中,用户可以跟踪他的锻炼情况,我想将其保存在 Cloud Firestore 中。我的想法是存储每个月的锻炼列表,以防止文档变得太大。所以一个文档看起来像这样:

month: '2022-02',
workouts: [
  {
  date: '2022-02-01',
  exercises: [
       {
        sets: [{'reps': 12, 'weight': 80}
               {'reps': 12, 'weight': 80}
            ],
       },
     ],
 },
{
  date: '2022-02-02',
  exercises: [
       {
        sets: [{'reps': 10, 'weight': 90}
               {'reps': 10, 'weight': 90}
            ],
       },
     ],
 },
],

问题:

例如,当我获取过去三个月的锻炼并将它们放在列表中以让用户与这些锻炼进行交互时。如何在正确的月份再次将它们存储在云 Firestore 中?

【问题讨论】:

    标签: flutter dart google-cloud-firestore data-modeling


    【解决方案1】:

    为了能够将数据写回您读取的同一文档,除了您从文档本身读取的字段之外,您还需要跟踪列表视图中每条数据的文档 ID。

    当您拥有文档 ID 后,向其中写入数据非常简单:

    FirebaseFirestore.instance
      .collection("yourWorkoutsCollection")
      .document(documentIdForTheMonth)
      .update({ 'workouts': FieldValue.arrayUnion([theWorkoutToAdd]) });
    

    【讨论】:

    • 谢谢弗兰克!我可以使用像“2022-02”这样的 ISO 字符串作为文档 ID 还是会导致热点?
    • 这似乎是一个不同的问题。 ¯_(ツ)_/¯ --- 顺序键会导致更多热点,但您必须自己估计您的应用是否/何时可能发生这种情况。
    • 好的,谢谢,我会问一个更详细的新问题
    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2021-07-15
    • 2021-05-27
    相关资源
    最近更新 更多