查询firebase不使用orderByChild / equalTo和字符串子字段

时间:2017-12-24 18:42:31

标签: android firebase firebase-realtime-database

我真的没有得到这个,再一次,接近绝望处理火力基地..

我在特定位置保存了一个列表: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("删除")。equalTo(false),而不是字符串字段。与其他字符串字段的情况相同。 还有人可以解释为什么在firebase查询的数据是如此荒谬复杂,每个查询需要花费数小时研究才能知道如何完成它?

2 个答案:

答案 0 :(得分:0)

只做

  

rootRef.child("聊天&#34)   .orderByChild(" UID&#34)。equalTo(" Jc9dASQdabXiT0holYFDkeqCczK2&#34)   .addListenerForSingleValueEvent

此查询适用于" Chats"节点,将通过" uid"来命令它们,并返回具有正确uid值的那个。
我认为之前的查询对您不起作用,因为您使用{{明确指定聊天中的哪个孩子1}},它使用键" WPXEmqvX1BfQB9n3UQFjF3xi1so2"返回给孩子。 (这是一个单独的聊天对象),所以orderByChild(" uid")不再像它应该的那样工作了。

答案 1 :(得分:0)

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