OP запросил структуру и некоторый код (Swift, Firebase Database) в качестве решения. Я представлю два варианта
Если вы хотите использовать запрос Firebase, чтобы узнать, существуют ли номера телефонов, возможная структура будет
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.
ИМО, лучший и значительно более быстрый вариант - сохранить узел только с телефонными номерами. Затем переберите те, которые вы ищете, и используйте .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)")
}
})
}
При тестировании это второе решение должно быть быстрее, чем первое.
person
Jay
schedule
29.08.2018