Long键上的不等式查询

时间:2017-10-04 06:57:36

标签: java android firebase firebase-realtime-database

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

我主要只需要当天的数据。我尝试加载最后1000个条目,然后检查他们的时间戳,看看它们是否符合今天的日期。这可行,但它没有进行优化,有时今天的数据远远超过1000个条目。

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

当前查询:

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

示例数据结构:

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

2 个答案:

答案 0 :(得分:1)

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

我不熟悉Firebase Java SDK,但在JavaScript中应该已经完成​​了 -

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

答案 1 :(得分: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);