Swift Firebase查询 - 快照中没有结果

时间:2018-03-19 14:49:32

标签: ios swift firebase firebase-realtime-database

我试图通过" name"来查询我们的LCList对象。值,如in this image所示。名称键位于对象下方的下一级。其他任何值都没有额外的等级。

我用来执行查询的代码是:(记住listsRef指向LCLList对象)

listsRef.queryOrderedByKey()
        .queryStarting(atValue: name)
        .observeSingleEvent(of: .value, with: { snapshot in

此查询的快照返回时没有任何值。我也试过按名称值排序结果,结果相同。我已经检查了仅使用queryOrderedByKey()方法调用返回的值,它们与数据库中的值匹配。问题显然是.queryStarting(atValue :)方法调用。

我真的很困惑,为什么这不起作用,因为同一个查询指向我们的LCLUser object,结构几乎相同,确实得到了结果。这两个对象存在于"对象"在上一张图片中看到的目录。

此时的任何帮助将不胜感激。我确定有一些简单的东西我不知道。

1 个答案:

答案 0 :(得分:0)

该查询不适用于问题中显示的Firebase结构。

您拥有的查询如下,我在每一行都添加了一条评论,详细说明了每行的内容

listsRef.queryOrderedByKey()   //<- examine the key of each child of lists
        .queryStarting(atValue: name)   //<- does that keys' value match the name var
        .observeSingleEvent(of: .value, with: { snapshot in   //do it once

,您当前的数据如下所示

Objects
   LCLLists
      node_x
         creator: "asdasa"
         name: "TestList3"
      node_y
         creator: "fgdfgdfg"
         name: "TestList"

所以这里发生的是将名称var(一个字符串)与每个键(一个字典)的值进行比较,这个值不能相等。 String≠Dictionary

    key                   value
["node_x": [creator: "asad", name: "TestList3"]

要使该查询起作用,您的结构必须像这样

Objects
   LCLLists
      node_x: "TestList3"
      node_y: "TestList"

我的猜测是你想坚持你当前的结构,所以我们想要使用你的结构查询所有'TestList'的名字

let ref = self.ref.child("LCLLists") //self.ref is a class var that references my Firebase
let query = ref.queryOrdered(byChild: "name").queryEqual(toValue: "TestList")
query.observeSingleEvent(of: .value, with: { snapshot in
    print(snapshot)
})

,结果是node_y

的打印输出
      node_y
         creator: "fgdfgdfg"
         name: "TestList"