【问题标题】:Inequality query on Long key长键不等式查询
【发布时间】:2017-10-04 06:57:35
【问题描述】:

我每隔几分钟(默认为 5 分钟,但可配置)为用户保存一些数据到 firebase realtime database。数据的关键是 Unix 时间戳。由于现在数据对于一些老用户来说太大了,我正在寻找从 Android 查询数据时过滤/限制数据的方法。

我主要只需要当天的数据。我尝试加载最后 1000 个条目,然后检查它们的时间戳以查看它们是否与今天的日期匹配。这行得通,但它没有经过优化,有时今天的数据远远超过 1000 个条目。

那么有什么方法可以查询键上的数据并仅获取键位于所提供值之间的那些对象?

当前查询:

Query lastQuery = ref.orderByKey().limitToLast(1000);

示例数据结构:

{
  "1502437050313": {
    "some_data": "some value",
    "timestamp": 1502437050313
  },
  "1502437050500": {
    "some_data": "some value",
    "timestamp": 1502437050500
  }
}

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    如果您只需要“今天”的项目,获取它们的最简单方法是计算今天开始的时间戳,如 here 所示:

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    long startTime = calendar.getTimeInMillis();
    

    然后你可以查询你的数据库:

    Query query = ref.orderByKey().startAt(startTime);
    

    【讨论】:

      【解决方案2】:

      我想知道是否不是随机获取 1000 条记录,然后比较每个记录的时间戳,您可以确定一天开始的时间戳,并在查询中使用它来获取记录的时间戳大于该值的记录.

      我并不精通 Firebase Java SDK,但在 JavaScript 中应该可以做到 -

      Query lastQuery = ref.orderByChild("timestamp").startAt(new Date().getTime())
      

      【讨论】:

      • 是的,问题是关于相同的方法。我想知道是否有可能,如果有,如何形成查询?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 2021-12-11
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      相关资源
      最近更新 更多