Firebase 查询子键中的时间戳不起作用

Posted

技术标签:

【中文标题】Firebase 查询子键中的时间戳不起作用【英文标题】:Firebase query for timestamp in subkey not working 【发布时间】:2021-11-17 05:37:00 【问题描述】:

我有以下代码:

DatabaseReference ref = lib.getFirebaseDatabase().getReference("data/newquestions");
        Query q = ref.orderByChild("date/timeUTC");
        long t = dtStart.getTimeUTC();
        q.startAt(t);
        q.addListenerForSingleValueEvent(new ValueEventListener() 

这是样本数据:

  
  "date" : 
    "time" : 1632050827132,
    "timeUTC" : 1632043627132,
    "timezone" : "Europe/Berlin"
  ,
  "enddate" : 
    "time" : 1632137227132,
    "timeUTC" : 1632130027132,
    "timezone" : "Europe/Berlin"
  ,
  "enumcontacttypes" : [ "Public" ],
  "id" : 117,
  "public" : true,
  "userid" : 8

我总是得到相同数量的值,而与我指定的日期无关。 startAt() 函数无效。

【问题讨论】:

【参考方案1】:

由于我看不到更详细的数据库架构,因此我不能说预期的查询是否会按预期工作。我能说的是,Firebase 实时数据库查询是不可变的。这意味着您不能更改现有查询的属性。如果您通过调用.startAt(t) 方法更改该值,那么它将成为一个新查询。因此,最简单的解决方案是将所有方法调用链接在一个 Query 对象中,如下所示:

DatabaseReference ref = lib.getFirebaseDatabase().getReference("data/newquestions");
long t = dtStart.getTimeUTC();
Query q = ref.orderByChild("date/timeUTC").startAt(t); //Added to the initial query
q.addListenerForSingleValueEvent(/* ... /*);

【讨论】:

以上是关于Firebase 查询子键中的时间戳不起作用的主要内容,如果未能解决你的问题,请参考以下文章

bookshelf.js 时间戳不起作用

VS c++ 删除子键不起作用!错误代码 0

角度应用程序中的 Firebase 功能不起作用

Firebase查询:“where”子句不起作用,继续返回所有文档

检查firebase实时数据库中的数据不起作用

如何将子firebase数据库中的特定名称获取到recyclerview?