Подтвердить что ты не робот

Как проверить, существует ли значение базы данных firebase?

Я использую базу данных Realtime с Google Firebase, и я пытаюсь проверить, существует ли ребенок.

Моя база данных структурирована следующим образом

- / (root)
-   /users/
–-    /james/
--    /jake/
-   /rooms/
--    /room1/
---      (room 1 properties)
--    /room2/
---      (room 2 properties)

Я хочу проверить, существует ли комната 1. Я пробовал следующее:

let roomName:String = "room1"
roomsDB.child(roomName).observeSingleEventOfType(.Value) { 
(snap:FIRDataSnapshot) in
    let roomExists:Bool = snap.value != nil ? "TAKEN" : "NOT TAKEN"
 }

При доступе к snap.value он возвращает JSON свойств этой комнаты, но как бы проверить, существует ли комната (/rooms/room1/)?

Комментарий, если требуется какое-либо разъяснение

4b9b3361

Ответ 1

self.ref = FIRDatabase.database().reference()

   ref.child("rooms").observeSingleEvent(of: .value, with: { (snapshot) in

        if snapshot.hasChild("room1"){

            print("true rooms exist")

        }else{

            print("false room doesn't exist")
        }


    })

Ответ 2

В то время как ответ @ismael33 работает, он загружает все rooms чтобы проверить, существует ли room1.

Следующий код выполняет то же самое, но затем только загружает rooms/room1 для этого:

ref = FIRDatabase.database().reference()

ref.child("rooms/room1").observeSingleEvent(of: .value, with: { (snapshot) in
    if snapshot.exists(){
        print("true rooms exist")
    }else{
        print("false room doesn't exist")
    }
}) 

Ответ 3

У меня есть некоторые предложения, используя firebase. Вы проверяете это от firebase.

Мы можем проверить наличие определенных ключей в DataSnapshot с помощью метода exists():

A DataSnapshot содержит данные из базы данных базы данных Firebase. Любые время, когда вы читаете данные из базы данных Firebase, вы получаете данные как DataSnapshot.

DataSnapshot передается обратным вызовам событий, которые вы прикрепляете с помощью on()или once(). Вы можете извлечь содержимое моментального снимка как JavaScript, вызвав его метод val(). Кроме того, вы можете перейдите в моментальный снимок, вызвав child(), чтобы вернуть ребенка снимки (которые вы могли бы затем вызвать val()).

DataSnapshot - это эффективная, неизменяемая копия данных в месте расположения базы данных. Они не могут быть изменены и никогда не будут меняться. Чтобы изменить данные, вы всегда используете ссылку Firebase напрямую.

exists() - возвращает true, если этот DataSnapshot содержит любые данные. Это немного более эффективно, чем использование моментального снимка. val() !== null.

Пример из документации firebase (пример javascript)

var ref = new Firebase("https://docs-examples.firebaseio.com/samplechat/users/fred");
ref.once("value", function(snapshot) {
  var a = snapshot.exists();
  // a === true

  var b = snapshot.child("rooms").exists();
  // b === true

  var c = snapshot.child("rooms/room1").exists();
  // c === true

  var d = snapshot.child("rooms/room0").exists();
  // d === false (because there is no "rooms/room0" child in the data snapshot)
}); 

Также см. эту страницу (уже упоминалось в моем комментарии)

Вот пример использования java.

Firebase userRef= new Firebase(USERS_LOCATION);
userRef.child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        if (snapshot.getValue() !== null) {
            //user exists, do something
        } else {
            //user does not exist, do something else
        }
    }
    @Override
    public void onCancelled(FirebaseError arg0) {
    }
});

Надеюсь, теперь у вас появилась идея.

Ответ 4

Вы можете проверить значение моментального снимка.

NSString *roomId = @"room1";
FIRDatabaseReference *refUniqRoom = [[[[FIRDatabase database] reference]
                                      child:@"rooms"]
                                     child:roomId];

[refUniqRoom observeSingleEventOfType:FIRDataEventTypeValue
                            withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {

    bool isExists = snapshot.exists;
    NSLog(@"%d", isExists);
}];

Ответ 5

Используйте любой из них Так просто и легко... Какой способ вам нравится

ValueEventListener responseListener = new ValueEventListener() {
    @Override    
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            // Do stuff        
        } else {
            // Do stuff        
        }
    }

    @Override    
    public void onCancelled(DatabaseError databaseError) {

    }
};

FirebaseUtil.getResponsesRef().child(postKey).addValueEventListener(responseListener);

function go() {
  var userId = prompt('Username?', 'Guest');
  checkIfUserExists(userId);
}

var USERS_LOCATION = 'https://SampleChat.firebaseIO-demo.com/users';

function userExistsCallback(userId, exists) {
  if (exists) {
    alert('user ' + userId + ' exists!');
  } else {
    alert('user ' + userId + ' does not exist!');
  }
}

// Tests to see if /users/<userId> has any data. 
function checkIfUserExists(userId) {
  var usersRef = new Firebase(USERS_LOCATION);
  usersRef.child(userId).once('value', function(snapshot) {
    var exists = (snapshot.val() !== null);
    userExistsCallback(userId, exists);
  });
}

Firebase userRef= new Firebase(USERS_LOCATION);
userRef.child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        if (snapshot.getValue() !== null) {
            //user exists, do something
        } else {
            //user does not exist, do something else
        }
    }
    @Override
    public void onCancelled(FirebaseError arg0) {
    }
});