web-dev-qa-db-fra.com

Comment vérifier si une valeur de base de données firebase existe?

J'utilise la base de données en temps réel avec Google Firebase et j'essaie de vérifier si un enfant existe.

Ma base de données est structurée comme suit

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

Je voudrais vérifier si room1 existe . J'ai essayé ce qui suit:

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

En accédant à snap.value, il retourne un JSON des propriétés de cette pièce, mais comment puis-je vérifier si la pièce (/rooms/room1/) existe pour commencer?

Commenter si des éclaircissements sont nécessaires

31
Hidden14
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")
        }


    })
61
ismael33

Pendant que la réponse de @ ismael33 fonctionne, il télécharge toutes les rooms pour vérifier si room1 existe.

Le code suivant accomplit la même chose, mais ne télécharge alors que rooms/room1 pour le faire:

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")
    }
}) 
13

J'ai quelques suggestions en utilisant firebase.Vous le vérifiez depuis firebase.

Nous pouvons tester l'existence de certaines clés dans une DataSnapshot en utilisant sa méthode exists():

Un fichier DataSnapshot contient des données provenant d'un emplacement de base de données Firebase. Tout Lorsque vous lisez des données d’une base de données Firebase, vous les recevez en tant que DataSnapshot.

Un DataSnapshot est transmis aux rappels d'événements que vous attachez avec on() ou once(). Vous pouvez extraire le contenu de l'instantané en tant que Objet JavaScript en appelant sa méthode val(). Sinon, vous pouvez traversez l'instantané en appelant child() pour renvoyer l'enfant instantanés (que vous pouvez ensuite appeler val() on).

Un DataSnapshot est une copie immuable des données générée de manière efficace à un emplacement de base de données. Ils ne peuvent pas être modifiés et ne changeront jamais . Pour modifier les données, vous utilisez toujours directement une référence Firebase.

exist () - Renvoie true si ce DataSnapshot contient des données. C'est légèrement plus efficace que d'utiliser un instantané .val() !== null.

Exemple tiré de la documentation de firebase (exemple 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)
}); 

Aussi s'il vous plaît se référer à cette page (déjà mentionné dans mon commentaire)

Voici un exemple utilisant 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) {
    }
});

J'espère que vous avez une idée maintenant.

7
Renjith VR

Vous pouvez vérifier la valeur snapshot.exists.

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);
}];
1

Utilisez n'importe lequel d'entre eux Si simple et facile .... Quel chemin vous aimez

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) {
    }
});
0
Sohaib Aslam