Как получить значение ключа в firebase - iOS - PullRequest
0 голосов
/ 22 мая 2018

так что это изображение моего дерева JSON: мой JSON TREE

Вопрос: я хотел знать, как я могу проверить, если имя пользователя, скажем, sean существует в usernames.В настоящее время я понятия не имею, как это реализовать.

То, что я пробовал: ключ usernames child - "theUsernameOf- userUID", и это вызывает проблему, поскольку userUID является динамическими отличается от каждого пользователя (от firebase auth), поэтому я не могу использовать:

.queryOrderedByChild("theUsernameOf-userUID").queryEqual(toValue: self.usernameTextBox.text!)

Ключ usernames child не может быть статическим, как theUsername какон мог бы иметь только 1 значение / не мог генерировать больше узлов.

Большое спасибо, извините, если я не объяснил достаточно ясно.

Ответы [ 5 ]

0 голосов
/ 22 мая 2018

Я хотел бы изменить структуру вашей БД, поскольку текущая не является правильной для выполнения этого запроса.

Это должно быть примерно так:

enter image description here

Всегда используйте автоматически увеличиваемые ключи для запросов.Здесь usernames -> autoGeneratedKey -> yourData (Dictionary - Key-Value pair) Теперь вы можете легко проверить наличие любой клавиши.

let ref = defaultDB.reference.child("usernames")
ref.queryOrdered(byChild: "username").queryEqual(toValue: "sean").observeSingleEvent(of: DataEventType.value) { (snapshot) in
    if snapshot.exists() {
        print("exists")
    }
    else {
        print("doesn't exist")
    }
}

Выход: существует

Это правильный путьсделать это.Только проверка на snapshot.exists() сделает всю работу за вас.

0 голосов
/ 22 мая 2018

Попробуйте этот код поможет вам вам не нужно менять структуру базы огня

  1. In Swift

    Database.database().reference(withPath: "users").queryOrdered(byChild: "usernames").queryEqual(toValue: "yourUserName").observe(.value)
       { (snapshot:DataSnapshot) in
    
          if snapshot.valueInExportFormat() is NSDictionary
          {
                    // User is exits
          }
          else
          {
    
          }
       }
    
  2. In Objective c

    [[[[[FIRDatabase database] referenceWithPath:@"users"] queryOrderedByChild:@"usernames"] queryEqualToValue:@"your User Name"] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot)
    {
     if ([snapshot.valueInExportFormat isKindOfClass:[NSDictionary class]])
     {
         // User is exits
     }
     else
     {
     }
    }];
    
0 голосов
/ 22 мая 2018

Вы также можете:

Сделать вызов Firebase на usernames и сделать это:

let usernames = snapshot.value as? [String: AnyObject], тогда все, что вам нужно сделать, это что-то вроде

if let keyExists = usernames[YOURUSERNAMECHECKSTRING] { //It's true }

Еще один взгляд на это.

0 голосов
/ 22 мая 2018

Когда вы наблюдаете любую ссылку в базе данных, вы получаете DataSnapshot взамен.Снимок имеет свойство перечислителя children, в которое можно перечислить каждого дочернего элемента.У каждого ребенка будет еще один DataSnapshot.Теперь каждый снимок имеет key и value.Вы хотите имя пользователя?Он находится в value свойстве:

let databaseRef = Database.database().reference(withPath: "usernames")
databaseRef.observe(.value) { (snapshot) in
    snapshot.children.forEach({ (child) in
        if let child = child as? DataSnapshot, let value = child.value {
            print(value)    //"Sean", "Yuh"
            // here you can check for your desired user
        }
    })
}
0 голосов
/ 22 мая 2018

Вот как вы можете это сделать

  1. Установить ссылку на базу данных для узла usernames.Например, db.ref.child("usernames")

  2. Теперь проанализируйте снимок с помощью цикла for, чтобы usernames = snapshot.value as!NSDictionary

  3. Теперь цикл for

    for username in usernames{
         if username.value == "Sean"{
          // do whatever you want here
        }
      }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...