2016-05-24 1 views
23

Ich verwende die Echtzeit-Datenbank mit Firebase von Google, und ich versuche zu überprüfen, ob ein Kind existiert.Wie überprüfe ich, ob ein Firebase-Datenbankwert existiert?

Meine Datenbank wird als die folgenden

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

Ich mag wäre zu prüfen, ob room1 vorhanden ist.

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

In snap.value Zugriff auf eine JSON der Eigenschaften dieses Raumes gibt, aber wie würde ich überprüfen, ob das Zimmer (/rooms/room1/) gibt es für den Anfang: Ich habe folgendes versucht?

Kommentar, wenn eine Klarstellung erforderlich ist

+0

@yahoo Wie würde ich darauf zugreifen? Ich kann nicht sehen, wo es in der Swift-Dokumentation ist. – Hidden14

+0

bitte beziehen Sie sich darauf. https://gist.github.com/anantn/4323949 –

Antwort

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


    ref.child("rooms").observeSingleEventOfType(.Value, withBlock: { (snapshot) in 

     if snapshot.hasChild("room1"){ 

      print("true rooms exist") 

     }else{ 

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


    }) 
+0

Dieser Code ist für die Firbase 3 (letzte ... Mai 2016) – ismael33

+0

Sie können auch überprüfen, ob es einen Raum mit haschilds() gibt, wenn es falsch ist, es hat überhaupt keinen Platz ... – ismael33

+1

Was ist, wenn die Objektnummer des Objekts, nach dem Sie suchen möchten, viele Daten enthält? Wird alles heruntergeladen? – rhcpfan

6

Ich habe einige Vorschläge, indem Sie es aus Feuerbasis firebase.You zu überprüfen.

Wir können für das Vorhandensein bestimmter Tasten testen innerhalb eines DataSnapshot seine exists() Methode:

A DataSnapshot enthält Daten aus einer Datenbank Firebase Lage. Beliebig Wenn Sie Daten aus einer Firebase-Datenbank lesen, erhalten Sie die Daten als DataSnapshot.

Ein DataSnapshot wird an die Ereignisrückrufe übergeben, die Sie mit on() oder once() anhängen. Sie können den Inhalt des Snapshots als JavaScript-Objekt extrahieren, indem Sie die Methode val() aufrufen. Alternativ können Sie in den Snapshot durch Aufruf child() aufrufen, um Kind Snapshots zurückzugeben (die Sie dann val() anrufen könnten).

Ein DataSnapshot ist eine effizient generierte, unveränderbare Kopie der Daten an einem Speicherort in der Datenbank. Sie können nicht verändert werden und werden sich niemals ändern. Um Daten zu ändern, verwenden Sie immer direkt eine Firebase-Referenz.

exists() - true zurück, wenn diese DataSnapshot keine Daten enthält. Es ist etwas effizienter als die Verwendung von Snapshot. val() !== null.

Beispiel von Feuerbasis Dokumentation (Javascript Beispiel)

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

Auch finden Sie diese page (bereits in meinem Kommentar erwähnt)

Hier ein Beispiel java ist.

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

Ich hoffe, Sie haben jetzt eine Idee.

+0

Ich verstehe, was Sie sagen, aber ich suchte nach Firebase 3. Ich hätte angeben sollen. Danke für die Antwort. – Hidden14

0

Sie können den Wert von snapshot.exists überprüfen.

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

Verwenden Sie eines von ihnen So einfach und einfach ... Welchen Weg Sie

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