2016-10-22 5 views
2

Я сделал свой поиск по Stackoverflow, но я не нашел решение я ищуКак искать в базе данных Firebase

Я хочу, чтобы искать в firebase базы данных, если «Name» равно имени в Навигация Название, а также «Электронная почта», которые пользователь использует для входа в аккаунт равно электронной почты в базе данных, то это позволит избежать пользователю добавить новый пункт

Json выглядит следующим образом

"Items" : { 
     "-KUMSKLFqMjclbqygnPL" : { 
     "Item" : "asdfg" 
     "Name" : "Fadi”, 
     "User Email" : "[email protected]" 
     } 
    } 

Мой код

let databaseRef = FIRDatabase.database().reference() 

    var NAME : String! 
    var UserEmail : String! 
    var email : String! 

    databaseRef.child("Items").queryOrderedByKey().observe(.childAdded, with: { snapshot in 

     let snapshotValue = snapshot.value as? NSDictionary 
     NAME = (snapshotValue?["Name"] as? String)! 

     UserEmail = (snapshotValue?["User Email"] as? String)! 
     email = (FIRAuth.auth()?.currentUser?.email)! 

     if NAME == navigationItem.title { 

      if UserEmail == email { 
       print ("you can't add new item \(UserEmail)") 
      }else if UserEmail != email { 
       print("you can add new Item") 

      } 
     } 
    }) 

Моя проблема Если имя равно Фади но есть два разных письма Результат будет

you can't add new item Optional("[email protected]") 
you can add new Item 

Он должен печатать только

you can't add new item Optional("[email protected]") 

Я не знаю, как Сломать это, прямо сейчас это похоже на то, что он перебирает всю базу данных

Обновлено:

Старается дравидийским ответ

Результата печати (snapShot.value):

"-KUMS7J-rCglHrVGX840" =  { 
    "Item" = "asdsd"    
    "Name" = "a"; 
    "User Email" = "[email protected]"; 
    }; 

В результате правильно! но теперь мне нужно, чтобы извлечь адреса электронной почты пользователя из этого узла

+1

Вы уже указали вы используете Swift, используя ' swift' бирка. Не нужно добавлять это в заголовок. –

ответ

4

Если вы ищете найти узел, который имеет определенное имя попробовать это: -

let databaseRef = FIRDatabase.database().reference() 
    databaseRef.child("Items").queryOrdered(byChild: "Name").queryEqual(toValue: "Fadi").observeSingleEvent(of: .value, with: { (snapShot) in 

     if let snapDict = snapShot.value as? [String:AnyObject]{ 

       for each in snapDict{ 
         let key = each.key as! String 
         let name = each.value["Name"] as! String 
         print(key) 
         print(name) 
       } 
      } 
     }, withCancel: {(Err) in 

      print(Err.localizedDescription) 

    }) 
+0

Фади это просто случайное имя, я объясню это снова Там приводится таблица, ее клетки а, Ь, с, d, е, ж и есть много пользователей user1 имеет электронный [email protected] user2 есть электронная почта [email protected] user3 есть электронная почта [email protected] Когда пользователь1 подписал, он может добавлять элемент для любых ячеек от a до g, но он может добавлять элемент один раз для каждой ячейки , что означает, если он добавит элемент в cell a , а затем попытайтесь снова добавить элемент в ячейку a, на экране появится сообщение об ошибке. , когда пользователь2 подписал его, он может добавлять к каждой ячейке за один раз и так далее, как user1 , поэтому все зависело как от имени ячейки, так и от пользователя электронной почты , чтобы избежать многократного добавления пользователя! – Basil

+0

@ Базил, который довольно обширен, я дал вам базовую идею о том, как запросить БД с помощью ключа, Happy Coding :) – Dravidian

+0

Просто, чтобы быть уверенным, что я объясняю экстенсивно =), В любом случае, спасибо, Хороший день =) – Basil

Смежные вопросы