【问题标题】:How to store data in Firebase Real-time Database under different date如何在不同日期下将数据存储在 Firebase 实时数据库中
【发布时间】:2021-08-20 01:24:42
【问题描述】:

我正在制作一个应用程序来保存和显示患者的癫痫发作历史。由于我是 Flutter 的新手,因此在癫痫发作时如何为当前用户在 firebase 中存储数据时遇到了困难。

我将数据存储在real-time database 中,因此,我将日期作为孩子使用,如果发生超过 1 次癫痫发作,那么它将在同一日期使用新密钥存储数据,但是假设明天也发生癫痫发作,日期为 2021 年 3 月 6 日,那么它将如何存储新日期的值?

目前,数据是这样存储的:

如何将新日期的数据存储在与 Seizure_history 相同的子项下?

我的代码如下所示:

// Store seizure data to firebase on occurrence
  storeSeizureData() {
    String dateString = DateTime.now().toString();
    var dateTime = DateTime.parse(dateString);
    var date = "${dateTime.day}-${dateTime.month}-${dateTime.year}";
    String duration = '15';
    print("Saving data to firebase");
    ref
        .child('User_data')
        .child(cuser.uid)
        .child("Seizure_history")
        .child(date)
        .push()
        .set({'duration': duration, 'datetime': dateString});

    Navigator.pushAndRemoveUntil(
      context,
      MaterialPageRoute(
        builder: (context) {
          return Homepage(device: widget.device);
        },
      ),
      (route) => false,
    );
  }

我希望第二天的癫痫发作应该与新日期分开存储,而不是在前一个日期之下,我想这样存储:

{
  "User_data" : {
    "QURxPw4UwBhvn0ZdMYb1wNPJ9ZH2" : {
      "Seizure_history" : {
        "2-6-2021" : {
          "-Mb8E79qdLq2-EI3Vy0i" : {
            "datetime" : "2021-06-02 01:20:56.535240",
            "duration" : "15"
          },
          "-Mb8EA3TYOQOUVpzQ3aE" : {
            "datetime" : "2021-06-02 01:21:08.509808",
            "duration" : "15"
          }
        }
        "3-6-2021" : {
          "-Mb8E79qdLq2-EI3Vy0i" : {
            "datetime" : "2021-06-02 01:20:56.535240",
            "duration" : "15"
          },
          "-Mb8EA3TYOQOUVpzQ3aE" : {
            "datetime" : "2021-06-02 01:21:08.509808",
            "duration" : "15"
          }
        }
      },
      "caregivers" : {
        "-Mat_n4SPyg3mgAFJeYi" : {
          "Caregiver_Name" : "Bro ????",
          "Caregiver_Number" : "033-253-04108 "
        }
      },
      "dateBirth" : "1999-05-26",
      "email" : "nabia.salman99@gmail.com",
      "gender" : "female",
      "mobile_no" : "2o29238347",
      "name" : "Nabia Salman",
      "profile_photo" : "https://firebasestorage.googleapis.com/v0/b/epicare-4d900.appspot.com/o/image_picker5066472271726518955.jpg?alt=media&token=41b83fa6-4429-448d-8b1b-48549efacba8"
    },
    "SmnClTT1STO3HywzhfZed1EF8GC2" : {
      "caregivers" : {
        "-MaXrew6oMLNIbpLdL9r" : {
          "Caregiver_Name" : "Dad",
          "Caregiver_Number" : "03145107020 "
        },
        "-MaXrhdR3BB4CVm_cRMN" : {
          "Caregiver_Name" : "Mom",
          "Caregiver_Number" : "03145308797 "
        },
        "-MaXtqrOMw0QLGdKkndG" : {
          "Caregiver_Name" : "Sister Zong",
          "Caregiver_Number" : "03176037020 "
        }
      },
      "dateBirth" : "2021-05-12",
      "email" : "hania9@gmail.com",
      "gender" : "leamef",
      "mobile_no" : "875487248944",
      "name" : "Hania Salman",
      "profile_photo" : "https://firebasestorage.googleapis.com/v0/b/epicare-4d900.appspot.com/o/c76d8746-395c-4632-82c3-709a8439f6c76494573163837145403.jpg?alt=media&token=0b425643-0e53-433b-aa19-a61898b4265f"
    },
    "yh6ATxquKjbmIWTbhVBudrGBVKB3" : {
      "caregivers" : {
        "-MaUwABpcS_MD6OLmaLP" : {
          "Caregiver_Name" : "Dad",
          "Caregiver_Number" : "03145107020 "
        }
      },
      "dateBirth" : "2021-05-21",
      "email" : "abdurehmanq19@gmail.com",
      "gender" : "male",
      "mobile_no" : "03325304108",
      "name" : "Abdurehman",
      "profile_photo" : "https://firebasestorage.googleapis.com/v0/b/epicare-4d900.appspot.com/o/image_picker-2053800923.jpg?alt=media&token=8232ffd0-bbb7-4090-99f6-10526d0de292"
    }
  }
}

【问题讨论】:

  • 看起来是正确的,明天会是不同的一天,所以孩子将是 3-6-2021,将创建另一个节点并存储在那里。
  • 其实我只是写了这段代码,所以我以为下一个日期的数据会出现在上一个日期的下面
  • 它将在下一个日期存储。您可以尝试将日期变量设置为不同的值,例如:var date = '3-6-2021'
  • 我不确定我是否理解您想要得到的结果。您能否将数据导出为 JSON 文本,然后在您的问题中添加您希望如何存储它?您可以通过单击 Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接以文本形式获取 JSON。
  • 如果我得到了正确的,代码是正确的。它将每天保存在 Seizure_history 下的不同节点中。

标签: flutter dart firebase-realtime-database


【解决方案1】:

从你开始:

String dateString = DateTime.now().toString();

无论何时该代码运行,它都会确定当前日期。因此,如果您在 6 月 3 日运行代码,它将生成该日期,并且您的数据库中的密钥将为 6 月 3 日。


与您的实际问题无关,但我强烈建议对日期使用 ISO-8601 格式,即:"2021-06-02"。这种格式的优点是您可以查询日期范围,例如使用ref.orderByKey().startAt("2021-").endAt("2021~") 获取 2021 年的所有日期。

【讨论】:

  • 感谢您的建议,我会记住这一点的:)
猜你喜欢
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 2019-04-07
  • 2021-10-28
相关资源
最近更新 更多