代码之家  ›  专栏  ›  技术社区  ›  0xC0DED00D

关于长键的不等式查询

  •  0
  • 0xC0DED00D  · 技术社区  · 7 年前

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

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

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

    当前查询:

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

    数据结构示例:

    {
      "1502437050313": {
        "some_data": "some value",
        "timestamp": 1502437050313
      },
      "1502437050500": {
        "some_data": "some value",
        "timestamp": 1502437050500
      }
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Frank van Puffelen    7 年前

    如果您只需要“today”的项目,最简单的方法是计算今天开始的时间戳,如图所示 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
  •  1
  •   jaibatrik    7 年前

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

    我不太熟悉Firebase Java SDK,但在JavaScript方面应该已经很熟练了-

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