【问题标题】:Firebase querying data like multiple where in androidFirebase查询数据,如android中的多个位置
【发布时间】:2021-02-03 22:54:22
【问题描述】:
{
  "Events" : {
    "16" : { 
      "eventDate" : "2021-02-02",
      "eventId" : "16",
      "eventName" : "First Test",
      "eventTime" : "09:39:00"
    },
    "22" : {
      "eventDate" : "2021-02-02",
      "eventId" : "22",
      "eventName" : "Test22 Exam",
      "eventTime" : "09:39:00"
    },
    "26" : {
      "eventDate" : "2021-02-02",
      "eventId" : "26",
      "eventName" : "Webinar",
      "eventTime" : "09:39:00"
    }
  }
}

如果我像这样存储我的Events,并且我想获得EventId 等于16 和26 的节点。 我该怎么做?

上面是issue的孩子,是root的孩子。

我尝试了 equalTo 但只得到一条记录。 我需要同时获得 16 和 26。

DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Query query = reference.child("Events").orderByChild("eventId").equalTo("16"); 

【问题讨论】:

  • 请检查副本以了解如何实现此目的。您也可以尝试使用Cloud Firestore
  • @AlexMamo:我实际上不认为这是您标记的问题的重复,因为这里 OP 正在尝试对多个值进行 OR,而不是跨多个属性进行 AND。不过,对于此类查询,使用 Firestore 是一个有效的选择。
  • @FrankvanPuffelen 即使 OP 写了“16 和 26”,是的,它是 OR 而不是 AND。顺便说一句,很高兴看到在 Firebase 实时数据库 SDK 12 月的更新中添加了 DatabaseReference#get() 和 Query#get()。谢谢。
  • 是的,get() 比预期更早地进入了 Android SDK,所以我们仍在跟进文档和博客文章。 RTDB SDK 的更多小改进即将推出。
  • @FrankvanPuffelen 等不及要看他们了 :)

标签: android firebase firebase-realtime-database


【解决方案1】:

Firebase 在其查询中不支持 OR。根据特定属性的值获取多个节点的唯一方法是使用 startAtendAt 选择一系列值,但在您的情况下,这也会返回 eventId 等于的节点22.

鉴于节点的键与您的 eventId 属性相同,我能想到的检索多个节点的最快方法是对每个键使用单独的 addListenerForSingleValueEvent()get() 调用:

reference.child("Events").child("16").get(...)
reference.child("Events").child("26").get(...)

像这样在 Firebase 中检索多个子节点非常快,因为所有请求都通过一个现有的套接字连接发送。有关这方面的更多信息,请参阅Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 2017-04-23
    • 1970-01-01
    相关资源
    最近更新 更多