Во-первых, этот код ...
.queryOrdered(byChild: "UserInfo/userid")
не работает, так как UserInfo не имеет прямого потомка идентификатора пользователя.Это дети 0, 1, 2 и т. Д.
Второе - это;в общем, лучше избегать массивов в базах данных NoSQL.
Возможное решение состоит в том, чтобы изменить структуру в соответствии с тем, что вы пытаетесь сделать.
вместо
GroupChat
uid
UserInfo
0...
1...
2...
где 0, 1, 2 - неизвестные ... измените его на
GroupChat
uid
UserInfo
uid_x
PhotoUrl
username
uid_y
PhotoUrl
username
uid_z
PhotoUrl
username
Эта структура позволяет легко увидеть, существует ли uid в UserInfo, поскольку вы будете знать прямой путь.Это также позволяет избежать запуска запроса в целом, что экономит ресурсы (запросы тяжелее, чем прямые наблюдатели). Вот некоторый псевдокод
let pathToCheck = rootRef.child("GroupChat").child(uid).child("UserInfo").child(uid_to_look_for)
затем
pathToCheck.observeSingleEvent.... { snapshot in
if snapshot.exists() {
// do something with the snapshot
} else {
print("user does not exist in group")
}
}