我想基于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
中答案 0 :(得分:0)
您可以为"用户"创建新的值监听器。然后相应地处理每个孩子,或者你可以使用for循环来遍历孩子,如下所示:
for child in snapshot.childSnapshot(forPath: "users").children
答案 1 :(得分: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)
}
}
}
}
}
})
答案 2 :(得分:0)
如果您可以稍微更改数据库结构,则不必使用所有循环。 您可以更改您的数据库,如下图所示。 相反,使用自动生成的密钥,您可以将用户ID用作密钥,并将值放在任何您喜欢的位置。
现在你写这样的查询。(抱歉!!这段代码片段在java中,Don&#t; t 知道很快,但这会帮助你。)
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")
}
})
希望这会对你有所帮助。