Этот вопрос не о том, как l oop над детьми, а о зацикливании детей по-разному, чтобы сэкономить расходы
Моя база данных:
-someRef
-someUserId // say this ref has 10000 children
-uid1: someVal
-uid2: someVal
-uid3: someVal
...
-uid7989: someVal
...
-uid10000: someVal
После этого ответ Я могу l oop над детьми вот так:
var lookForThisUserId = "uid7989"
someRef?.observeSingleEvent(of: .value, with: { (snapshot) in
for child in snapshot.children {
let snap = child as! DataSnapshot
if snap.key == self.lookForThisUserId {
// user found
break
}
}
})
Но я задал этот вопрос на днях и изначально выбрал этот ответ , который оказался неэффективным способом сделать то, что я хотел сделать. В комментариях @Jay сказал:
«Есть принятый ответ, но вот в чем проблема. По сути, вы пытаетесь отслеживать количество дочерних элементов в узле. во всем узле (который может быть тысячами голосов) и с использованием .childrenCount. Это приведет к чтению большого количества ненужных данных и увеличению затрат "
Так что это заставило меня задуматься, есть разница в стоимости между кодом l oop, который я добавил выше, и кодом ниже:
var lookForThisUserId = "uid7989"
someRef?.child(lookForThisUserId).observeSingleEvent(of: .value, with: { (snapshot) in
if !snapshot.exists() {
// this user isn't in here
}
// user found
})