Firebase数据库查询:返回子项具有值的最新添加对象

时间:2018-05-17 07:27:36

标签: android firebase firebase-realtime-database kotlin

我正在构建一个Android应用程序,用户可以通过插入权重(可选)和/或上传图片(可选)来跟踪其权重和进度。

{
  "users" : {
    "5aHvYy5wTIVAAgdOEso0wr2woHS2" : {
      "firstName" : "Justin",
      "logs" : [ {
        "date" : "16/05/2018",
        "progressPicture" : "http://www.google.com/example.jpg",
        "weight" : 82.1
      }, {
        "date" : "17/05/2018",
        "progressPicture" : "http://www.google.com/example.jpg"
      }, {
        "date" : "18/05/2018",
        "weight" : 80.3
      } ]
    }
}

我通过按键排序并使用以下代码将结果限制为1来设法获取最新日志。

firebaseDatabase.getReference(USER_REFERENCE).child(firebaseAuth.currentUser?.uid).child(LOG_REFERENCE).orderByKey().limitToLast(1).

从我的JSON中可以看出,日志不一定必须具有权重值。

我的问题: 如何调整我的查询以便我检索最新的日志(因此只有1个基于密钥的日志),其中有一个重量值?

2 个答案:

答案 0 :(得分:1)

您可以添加名为weight_log的新条目,该条目会在记录新的重量时更新,您可以使用firebase functions轻松完成 /users/{userId}/weight_log/{iterationID}创建活动

然后您可以在新路径上使用limitToLast(1)

通常,优化数据结构是一种很好的做法

答案 1 :(得分:0)

通过阅读维基,您只能过滤数据,并通过添加ValueEventListener()检查是否有重量值,这将返回您必须循环通过它的所有列表的列表并获取你重视

https://firebase.google.com/docs/database/android/lists-of-data#filtering_data