测试Firebase中是否存在数据

Max*_*Max 33 javascript firebase

我想测试Firebase中是否存在数据,然后再添加它.但我的方法有问题:我尝试使用此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");
});
Run Code Online (Sandbox Code Playgroud)

但如果用户不存在,则会在之前添加,然后我的代码表明他存在.你会说这是正常的,因为我的警报仅在"child_added"时被调用,但我不知道怎么办.

我也尝试过"值"事件,但我的"message.name"是空的.

我该如何解决?

Fra*_*len 55

您可以使用它DataSnapshot.hasChild来确定某个孩子是否存在.

usersRef.once('value', function(snapshot) {
  if (snapshot.hasChild(theDataToAdd)) {
    alert('exists');
  }
});
Run Code Online (Sandbox Code Playgroud)

这是一个快速的jsfiddle显示它是如何工作的:http://jsfiddle.net/PZ567/

但是这将下载所有数据usersRef并在客户端上执行检查.通过加载更具针对性的ref,只为您要检查的用户下载数据更有效:

usersRef.child(theDataToAdd).once('value', function(snapshot) {
  if (snapshot.exists()) {
    alert('exists');
  }
});
Run Code Online (Sandbox Code Playgroud)


dim*_*4eg 18

我使用以下代码:

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");
});
Run Code Online (Sandbox Code Playgroud)

我的方法比这更轻量级:

usersRef.once('value', function(snapshot) {
  if (snapshot.hasChild(theDataToAdd)) {
    alert('exists');
  }
});
Run Code Online (Sandbox Code Playgroud)

因为客户端不会获取所有用户数据,这可能是巨大的.


小智 11

检查Firebase Db中是否存在ANDROID数据的方法.

 final Firebase firebaseRef = new Firebase(<Your_Firebase_URL>/Users).child(username);


firebaseRef.addListenerForSingleValueEvent(new ValueEventListener) {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
        // User Exists
    }
}

@Override
public void onCancelled(FirebaseError firebaseError) {

}
});
Run Code Online (Sandbox Code Playgroud)