在 firebase 上查询无法使用带有字符串子字段的 orderByChild/equalTo

2024-04-07

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

我有一个列表保存在特定位置: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

Handler:

    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 的数据查询如此复杂,并且每个查询都需要花费数小时的研究才能弄清楚它是如何完成的吗?


Just do

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 firebase 上查询无法使用带有字符串子字段的 orderByChild/equalTo 的相关文章

随机推荐