2017-07-19 46 views
3

我想根据USER_ID检索网站信息获取USER_ID,我使用下面的查询检索网站信息如何从嵌套母火力

ref = Database.database().reference() 

     self.ref.child("sites").queryOrdered(byChild: "user_id").queryEqual(toValue:"DxMYXkVqnZMC6NEZxdSQF3G2ZJ53") 
      .observe(.childAdded, with: { snapshot in 

       if (snapshot.value is NSNull) { 
        print("Not found") 


       } else { 
        print("found") 


       } 
      }) 

我可以打电话查询,如果它的STORE_NAME,idToken等。但不能够调用USER_ID,因为它是一个childbuAutoid

enter image description here

回答

0

您可以创建新的价值听众里面的“用户”,然后相应地处理每一个孩子,或者你可以在孩子使用一个for循环回路,像这样:

for child in snapshot.childSnapshot(forPath: "users").children 
0

由于您的userID是嵌套的,因此您需要保持循环数据,这就是为什么它看起来很丑。看看下面的代码,它应该工作。它只是循环查找值,直到找到user_id。有关图片的更多信息,请参阅我的其他答案:https://stackoverflow.com/a/45143371/7715250它更清晰地说明了某件事的功能。

ref = Database.database().reference() 

     self.ref.child("sites").observe(.childAdded, with: { snapshot in 

       if (snapshot.value is NSNull) { 
        print("Not found") 


       } else { 
       print("found") 
       let enumerator = snapshot.children 
       while let rest = enumerator.nextObject() as? FIRDataSnapshot { 
        if (rest as? DataSnapshot).key == "users"{ 
        let enumerator2 = (rest as? DataSnapshot).children 
        while let rest2 = enumerator2.nextObject() as? FIRDataSnapshot { 
        for userID in (rest2 as? DataSnapshot).children{ 
        let values = (userID as? DataSnapshot).value as? NSDictionary 
        let userId = values?["user_id"] as? String ?? "" 
         print(userId) 
      } 
     } 
    } 
    } 
} 
}) 
+0

其实它没有进入“找不到”或“找到” –

+0

@HaseenaPA我用ref做了一个小改动,它很奇怪它不打印任何东西。你有完整的许可? –

+0

@HaseenaPA你可以在我的答案中查看我提供的链接,它可以让你知道如何循环访问多个数据 –

0

如果你可以改变你的数据库结构有点比你不必使用所有的循环。 您可以像下面的图片一样更改数据库。 而不是使用自动生成的密钥,您可以使用用户ID作为密钥并将值设置为任何你喜欢的。

enter image description here

现在你写这样的查询。(对不起!此代码段是在Java中,不知道 迅速,但是这会帮助你)。

dbr.child("sites").orderByChild("users/"+/*put user_id you want to search*/).equalTo("user_id").addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      /*here you get the datasnapshot according to search*/ 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

尝试更新您的代码。

self.ref.child("sites").queryOrdered(byChild: "users/"+"DxMYXkVqnZMC6NEZxdSQF3G2ZJ53").queryEqual(toValue:"user_id") 
     .observe(.childAdded, with: { snapshot in 

      if (snapshot.value is NSNull) { 
       print("Not found") 


      } else { 
       print("found") 


      } 
     }) 

希望这会对你有帮助。

+0

如果我们编辑当前的数据库结构将很难处理它,是否有可能与当前结构相关 –

+0

是的,但您需要使用编码完成此操作,获取数据快照中的值,然后检查user_id是否存在。 – Abhishek