queryOrderBy中的Firebase访问键

时间:2016-06-04 15:33:58

标签: swift firebase

我有2个与此查询相关的问题:

  1. 我在Firebase中运行查询,查询返回我正在查找的结果但是当我尝试访问查询中的数据时,它是nil

  2. 如何在查询中访问标记键?这是1深

  3. 提前谢谢

    查询

    .so

    JSON结果

    ref.child("users")
       .queryOrderedByChild("receivePostRequest/status")
       .queryEqualToValue(true)
       .observeEventType(.Value, withBlock: {snapshot in
    

    这是完整的查询

    Optional({
        lgmSZ1HnMnSzE71kCLfdxK8AN2G2 =     {
            age = 18;
            email = "lon1@gmail.com";
            firstname = Jamie;
            lastname = lon;
            latitude = "37.3325232";
            longitude = "-122.0286527";
            profilePic = "users/profilePhoto/W6pK2HHA1TZC9wicnCaODQhHvoi1.jpg";
            receivePostRequest =         {
                status = 1;
                tag = tagSample;
    
            };
            userId = lgmSZ1HnMnSzE71kCLfdxK8AN2G2;
        };
    })
    

    JSON

    ref.child("users")
       .queryOrderedByChild("receivePostRequest/status")
       .queryEqualToValue(true)
       .observeEventType(.Value, withBlock: {snapshot in
                 print(snapshot.value["firstname"])
            })
    

2 个答案:

答案 0 :(得分:0)

尝试..

print(snapshot.childSnapshotForPath("firstname").value)

答案 1 :(得分:0)

小心1和真实,因为它们会返回不同的结果

如果Firebase中存储的整数值为1

node_0
  test: 1
node_1
  test: true
node_2
  test: 1

如果查询是

queryOrderedByChild("test").queryEqualToValue(true)

只会返回node_1,因为它是真的

同样地

queryOrderedByChild("test").queryEqualToValue(1)

只返回node_0和node_2,因为它们是1

回答这个问题:

print(snapshot.value) //prints all of the data in the node

当你返回.Value时,快照会有孩子,所以一种方法来访问每个孩子的钥匙:

for child in snapshot.children {
  let key = child.key as String
  print(key)
}

这将打印每个父节点密钥,在这种情况下为lgmSZ1HnMnSzE71kCLfdxK8AN2G2

修改

回应评论/问题

  

但我也尝试检索"tag" : "tag 1

从child = snapshot.children循环开始,没有最初明显的方法,所以这里是你如何做到的

for child in snapshot.children {

     let receivePostRef = child.childSnapshotForPath("receivePostRequest")
     let aTag = receivePostRef.value["tag"]
     print("setting = \(aTag)") //print's Tag1
}