【问题标题】:Firebase database returning data out of the filter [duplicate]Firebase数据库从过滤器中返回数据[重复]
【发布时间】:2018-10-05 21:44:33
【问题描述】:

Firebase 返回的数据与我想要的查询不匹配。

我的域类类似于

Event {

long eventDate
//many other irrelevant stuff
}

我希望检索接下来的 10 个事件(今天之后)(SQL 如下:
Select * from event e where e.eventDate > now() order by e.eventDate ASC limit 10

然后我正在执行以下请求:

fire.child("event").orderByChild("eventDate").startAt(System.currentTimeMillis() + 1, "eventDate").limitToFirst(10).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        List<Giveaway> page = new ArrayList<>(PAGE_SIZE);

            for (DataSnapshot evs : dataSnapshot.getChildren()) {

                    Event da = evs.getValue(Event.class);
                    long s = System.currentTimeMillis();
                    long w = da.eventDate;
        System.out.println(s < w); //IN APP CHECK
]
    }}

但是这个查询返回的所有结果都打印false

【问题讨论】:

  • 它在哪里返回false?请添加相应的代码。
  • @AlexMamo,它不返回 false,它返回值,当我检查 System.out.println(s &lt; w); 时它总是打印 false...检查代码
  • 所以这是正确的行为,因为当前时间戳不能小于过去的时间戳,对吧?
  • @AlexMamo 你读过我的问题吗?我希望现在之后发生事件......所以当前时间戳必须低于 eventDate
  • 那么您确定w 是在以后设置的吗?你能从你的数据库中为我们提供一个具体的例子吗?我很害怕 if 语句没有弄错。

标签: java android firebase firebase-realtime-database


【解决方案1】:

我回答这个问题是为了将来有人会遇到同样的问题,因为谷歌的 api 太不直观了

根据火力基地: https://firebase.google.com/docs/reference/android/com/google/firebase/database/Query

startAt(boolean value, String key) 创建一个仅限于的查询 返回值大于或等于给定值的子节点 值,使用给定的 orderBy 指令或优先级作为默认值,以及 另外只有键大于或等于的子节点 给定密钥。

所以我认为.startAt(System.currentTimeMillis() + 1, "eventDate") 会返回子节点eventDate 大于System.currentTimeMillis() + 1 但实际上startAt 上的第二个参数用于比较每个节点的键

所以这使我的查询逻辑完全损坏

删除startAt 的第二个参数使得返回符合预期

【讨论】:

  • 很高兴听到您找到问题的原因 Rafael。 startAt() 的第二个参数确实仅用于在多个匹配的情况下消除歧义。另见stackoverflow.com//45625553stackoverflow.com/a/44895055
  • @FrankvanPuffelen,仍然是反直觉的方式,100% 的开发人员希望有一种方法来分配二阶参数(因为任何 sql db 都允许您按多列排序)或简单的@ 987654330@ 与订单参数不同的东西......
猜你喜欢
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 2021-06-21
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
  • 2021-06-21
相关资源
最近更新 更多