Verifica se esistono dati in Firebase

Vorrei testare se esiste già un dato in Firebase per aggiungerlo. Ma ho un problema con il mio metodo: cerco di elencare tutti i dati con questo codice Javascript:

var theDataToAdd = userName; var usersRef = new Firebase('https://SampleChat.firebaseIO-demo.com/users/'); usersRef.on('child_added', function(snapshot) { var message = snapshot.val(); if (message.name == theDataToAdd) alert ("exist"); }); 

Ma se l’utente non esiste, verrà aggiunto prima, quindi il mio codice dice che esiste. Dirai che è normale perché il mio avviso è chiamato solo quando “child_added”, ma non vedo come farlo.

Ho provato anche con l’evento “value” ma il mio “message.name” è vuoto.

Come posso ripararlo?

È ansible utilizzare DataSnapshot.hasChild per determinare se esiste un determinato figlio.

 usersRef.once('value', function(snapshot) { if (snapshot.hasChild(theDataToAdd)) { alert('exists'); } }); 

Ecco un rapido jsfiddle che mostra come funziona: http://jsfiddle.net/PZ567/

Ma questo scaricherà tutti i dati in usersRef ed eseguirà il controllo sul client. È molto più efficiente scaricare i dati solo per l’utente che vuoi controllare, caricando un riferimento più mirato:

 usersRef.child(theDataToAdd).once('value', function(snapshot) { if (snapshot.exists()) { alert('exists'); } }); 

Io uso il seguente codice:

 var theDataToAdd = userName; var ref = new Firebase('https://SampleChat.firebaseIO-demo.com/users/' + theDataToAdd); ref.on('value', function(snapshot) { if (snapshot.exists()) alert ("exist"); else alert ("not exist"); }); 

Il mio metodo è più leggero di questo:

 usersRef.once('value', function(snapshot) { if (snapshot.hasChild(theDataToAdd)) { alert('exists'); } }); 

perché un client non recupera tutti i dati degli utenti, il che può essere enorme.

Modo per verificare se i dati esistono o meno in un Db Firebase per ANDROID.

  final Firebase firebaseRef = new Firebase(/Users).child(username); firebaseRef.addListenerForSingleValueEvent(new ValueEventListener) { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { // User Exists } } @Override public void onCancelled(FirebaseError firebaseError) { } });