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
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")
}
})
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")
}
})
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()
ouonce()
. Vous pouvez extraire le contenu de l'instantané en tant que Objet JavaScript en appelant sa méthodeval()
. Sinon, vous pouvez traversez l'instantané en appelantchild()
pour renvoyer l'enfant instantanés (que vous pouvez ensuite appelerval()
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.
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);
}];
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) {
}
});