39 votes

Comment puis-je vérifier si une valeur de la base de données Firebase existe ?

J'utilise la base de données en temps réel avec Firebase de Google, 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 la pièce 1 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 renvoie un JSON des propriétés de cette pièce, mais comment puis-je vérifier si la pièce ( /rooms/room1/ ) est là pour commencer ?

Commentez si une clarification est nécessaire

0 votes

@Yahoo Comment puis-je y accéder ? Je ne vois pas où il se trouve dans la documentation de Swift.

0 votes

Veuillez vous référer à ce . gist.github.com/anantn/4323949

84voto

ismael33 Points 799
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")
        }

    })

0 votes

Ce code est pour le Firbase 3 (le dernier ... mai 2016)

0 votes

Vous pouvez aussi vérifier s'il y a une chambre avec haschildren() si c'est faux, il n'y a pas de chambre du tout ...

2 votes

Que se passe-t-il si le parrent de l'objet que vous souhaitez vérifier contient beaucoup de données ? Seront-elles toutes téléchargées ?

29voto

Frank van Puffelen Points 16029

Alors que le réponse de @ismael33 fonctionne, il télécharge tous les rooms pour vérifier si room1 existe.

Le code suivant accomplit la même chose, mais ne fait que télécharger 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")
    }
})

0 votes

Cette méthode est BEAUCOUP plus efficace. En plus de ne pas avoir à télécharger toutes les données, si, comme moi, vous avez des restrictions dans les règles où vous ne pouvez pas lire l'équivalent de l'icône room vous pouvez aller plus loin dans l'arbre sans causer de problèmes pour vérifier s'il existe bien.

8voto

Renjith VR Points 1483

J'ai quelques suggestions en utilisant firebase.vous le vérifier à partir de firebase.

Nous pouvons tester l'existence de certaines clés au sein d'un fichier DataSnapshot en utilisant son exists() méthode :

A DataSnapshot contient des données provenant d'un emplacement de la base de données Firebase. Chaque fois que données d'une base de données Firebase, vous recevez les données sous forme de DataSnapshot.

Un DataSnapshot est transmis aux rappels d'événements que vous attachez avec la commande on() ou once() . Vous pouvez extraire le contenu de l'instantané sous forme d'objet JavaScript en appelant son val() méthode. Vous pouvez également traverser l'instantané en appelant child() pour renvoyer des (que vous pouvez ensuite appeler val() sur).

Un DataSnapshot est une copie immuable et efficacement générée des données à un emplacement de la base de données. Elles ne peuvent pas être modifiées et ne changeront jamais. Pour modifier des données, vous devez toujours utiliser directement une référence Firebase.

existe() - Renvoie un résultat positif si ce DataSnapshot contient des données. C'est légèrement plus efficace que l'utilisation du snapshot. val() !== null.

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

Veuillez également vous référer à ce qui suit 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.

0 votes

Je comprends ce que vous dites, mais je cherchais Firebase 3. J'aurais dû le préciser. Merci pour la réponse.

1voto

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

0voto

Sohaib Aslam Points 217

Utilisez n'importe lequel d'entre eux Si simple et facile ... La façon que 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) {
    }
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X