Раздражающая проблема, связанная с indexOn в правилах Firebase - PullRequest
0 голосов
/ 02 мая 2019

Я прочитал практически каждый ответ StackOverflow, и ни один из них не работал для моего сценария, так как это частая проблема. Моя консоль Xcode выдает очень распространенное предупреждение при запросе данных в Firebase. Это предупреждение Using an unspecified index. Your data will be downloaded and filtered on the client. Consider adding ".indexOn": "username" at /users to your security rules for better performance

Сначала я прочитал документацию по Firebase, точно понимая, что я делаю, и другие ответы, как указано, например Почему этот Firebase ".indexOn" не работает? . Ниже я предоставил свои правила безопасности, действующие точно так же, как и сообщение; добавление indexOn в / users, но безуспешно. Я также предоставил свой узел пользователей базы данных и одну функцию ниже.

{
  "rules": {
     ".read": true,
     ".write": true,
    "users":{
             ".indexOn": "username"
             }
         }
     }

Моя база данных Firebase в / users в формате JSON

    "users":{
      "5LYUynelLTcL8Bg9WNWGXV34YIq2" {
         "email": "user1@gmail.com"
         "username": "user1"
         }
       "9srk307kzxOW7j6dNmMaac9eYPu2" {
         "email": "user2@gmail.com"
         "username": "user2"
     }

Моя функция, которую я использую в Swift

let ref = Database.database().reference().child("users").queryOrdered(byChild: "username").queryEqual(toValue: passedInFriendString)
    ref.observeSingleEvent(of: .value) { (snapshot) in
        print(snapshot)
        }

Я не уверен, куда еще обратиться. Любое понимание, является ли это даже правильным форматом для запроса того, что я хочу, было бы здорово!

1 Ответ

0 голосов
/ 03 мая 2019

Я решил это!

То, чего я не осознавал, было то, что приведенный выше код в моем вопросе успешно печатает снимок после добавления соответствующего определения индекса для / users.Моя проблема заключалась в том, что вам нужно циклически просмотреть снимок, если вы хотите получить дополнительный доступ к данным снимка имени пользователя, к которому я запрашивал соответственно.Это выглядело бы примерно так

let ref = Database.database().reference().child("users").queryOrdered(byChild: "username").queryEqual(toValue: passedInFriendString)
    ref.observeSingleEvent(of: .value) { (snapshot) in
    for child in snapshot.children {
      guard let snap = child as? DataSnapshot else {return}
      if snap.hasChild("email") {
         print("It has an email")
            }
          }
        }

Спасибо Фрэнку выше за то, что он направил меня и подтвердил, что я на правильном пути.Я счастлив, что узнал что-то новое и очень эффективное, когда мне нужно получить данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...