【问题标题】:Querying at firebase not working with orderByChild/equalTo with a string child field在 firebase 查询不能使用带有字符串子字段的 orderByChild/equalTo
【发布时间】:2018-06-06 09:18:02
【问题描述】:

我真的不明白,再一次,我接近绝望地处理火力基地..

我在特定位置保存了一个列表:root/Chats/WPXEmqvX1BfQB9n3UQFjF3xi1so2

    "Chats" : {
    "Jc9dASQdabXiT0holYFDkeqCczK2" : {
      "-L18x_ytEW0vEh5PpMWt" : {
        "deleted" : false,
        "lastMessage" : "Yes, we can meet on thursday",
        "nick" : "Hugo",
        "uid" : "WPXEmqvX1BfQB9n3UQFjF3xi1so2",
        "userType" : 0
      }
    },
    "WPXEmqvX1BfQB9n3UQFjF3xi1so2" : {
      "-L18x_ys4_VF-zSDDk8J" : {
        "deleted" : false,
        "lastMessage" : "Yes, we can meet on thursday",
        "nick" : "SABINE",
        "uid" : "Jc9dASQdabXiT0holYFDkeqCczK2",
        "userType" : 1
      },
      "-L18x_z5trZFItxd08XI" : {
        "deleted" : false,
        "lastMessage" : "I´m fine, thanks, how are you?",
        "nick" : "Melanie",
        "uid" : "qTmcljT8YAYf2TpnxX1LCopdXde2",
        "userType" : 1
      }
    },
    "qTmcljT8YAYf2TpnxX1LCopdXde2" : {
      "-L18x_z5trZFItxd08XJ" : {
        "deleted" : false,
        "lastMessage" : "I´m fine, thanks, how are you?",
        "nick" : "Hugo",
        "uid" : "WPXEmqvX1BfQB9n3UQFjF3xi1so2",
        "userType" : 0
      }
    }
  }

我想检查列表是否包含具有特定 uid 的条目

rootRef.child("Chats").child("WPXEmqvX1BfQB9n3UQFjF3xi1so2")
.orderByChild("uid").equalTo("Jc9dASQdabXiT0holYFDkeqCczK2")
.addListenerForSingleValueEvent

处理程序:

    rootRef.child("Chats").child("WPXEmqvX1BfQB9n3UQFjF3xi1so2")
                    .orderByChild("uid").equalTo("Jc9dASQdabXiT0holYFDkeqCczK2")
                    .addListenerForSingleValueEvent(object : ValueEventListenerAdapter(){
                        override fun onDataChange(data: DataSnapshot?) {

                        }
                    })

    open class ValueEventListenerAdapter : ValueEventListener {
    override fun onDataChange(data: DataSnapshot?) {}
    override fun onCancelled(error: DatabaseError?) {
        throw DbFailureException(if (error != null) error.message else "Unknown reason")
    }
}

我在 onDataChange 方法中收到的 DataSnapShot 对象是空的,没有找到。为什么?它适用于布尔字段,例如 .orderByChild("deleted").equalTo(false),但不适用于字符串字段。其他字符串字段的情况相同。 也有人可以解释一下为什么在 firebase 上进行的数据查询如此复杂,而且每个查询都需要数小时的研究才能弄清楚它是如何完成的?

【问题讨论】:

  • 您在问题中包含了 JSON 树的图片。请将其替换为作为文本的实际 JSON,您可以通过单击 Firebase 数据库控制台中的导出 JSON 链接轻松获取该文本。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。
  • 在进一步使用该软件并进行测试时,甚至似乎这种代码,在其他地方也以类似的方式使用,有时可以工作,返回单个值,有时不能。真的很奇怪..
  • 您能否显示您的处理程序的内容,以便我们检查如何您正在处理查询结果?即使您只是记录数据,也没关系;只要确保它重现了问题。
  • 没有什么可复制的,我实现了一个 ValueEventListener 对象,并在对它进行任何操作之前直接查看我在 onDataChange 收到的 DataSnapshot
  • 请与我们分享您的处理程序的内容。

标签: android firebase firebase-realtime-database


【解决方案1】:

当您持有特定节点时,您无法更新同一节点。为什么,因为它仍在使用并持有参考。

【讨论】:

    【解决方案2】:

    就做吧

    rootRef.child("聊天") .orderByChild("uid").equalTo("Jc9dASQdabXiT0holYFDkeqCczK2") .addListenerForSingleValueEvent

    对于“聊天”节点中的所有子节点,此查询将按“uid”排序,并返回具有正确 uid 值的查询。
    我认为之前的查询对您不起作用,因为您明确表示使用.child("WPXEmqvX1BfQB9n3UQFjF3xi1so2") 指定聊天中的哪个孩子,这将返回具有键“WPXEmqvX1BfQB9n3UQFjF3xi1so2”(这是一个单独的聊天对象)的孩子,因此 orderByChild("uid") 不再像预期的那样工作。

    【讨论】:

    • 这无济于事,在每个第一级 Uid 下,我都有一个自己的列表,其中包含具有第二级 Uid 的元素。我需要通过使用特定的第一级 Uid 直接进入一个特定的列表,然后在此列表中搜索第二级 Uid。使用 .child("WPXEmqvX1BfQB9n3UQFjF3xi1so2") 我没有得到一个聊天对象,我得到一个列表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2021-12-24
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多