ОП запросил структуру и некоторый код (Swift, Firebase Database) в качестве решения. Я представлю два варианта
Если вы хотите использовать Firebase Query, чтобы узнать, существуют ли номера телефонов, возможная структура будет
users
uid_0
contact_name: "Larry"
contact_phone: "111-222-3333"
uid_1
contact_name: "Joe"
contact_phone: "444-555-6666"
, а затем быстрый код для запроса существующих номеров
let phoneNumbers = ["111-222-3333","444-555-6666"] //an array of numbers to look for
let myQueryRef = self.ref.child("users")
for contactPhone in phoneNumbers {
let queryRef = myQueryRef.queryOrdered(byChild: "contact_phone").queryEqual(toValue: contactPhone)
queryRef.observeSingleEvent(of: .childAdded, with: { snapshot in
if snapshot.exists() {
print("found \(contactPhone)") //or add to array etc
}
})
}
Наличие запросов в узком цикле, как это, как правило, не рекомендуется, но обычно оно хорошо работает для меня с небольшими итерациями. Однако запросы имеют намного больше накладных расходов, чем .observers.
IMO, лучший и значительно более быстрый вариант - оставить в узле только телефонные номера. Затем переберите те, которые вы ищете, и используйте .observe, чтобы увидеть, существует ли этот узел.
phone_numbers
111-222-3333: true
444-555-6666: true
и затем код, чтобы увидеть, существуют ли те из массива
let phoneNumbers = ["111-222-3333","444-555-6666"] //an array of numbers to look for
let phoneNumberRef = self.ref.child("phone_numbers")
for contactPhone in phoneNumbers {
let ref = phoneNumberRef.child(contactPhone)
ref.observeSingleEvent(of: .value, with: { snapshot in
if snapshot.exists() {
print("found \(contactPhone)")
}
})
}
При тестировании это второе решение должно работать быстрее, чем первое.