如何检查firebase数据库值是否存在?

时间:2016-05-24 05:34:37

标签: swift firebase firebase-realtime-database

我正在使用谷歌Firebase的实时数据库,我正在尝试检查孩子是否存在。

我的数据库结构如下

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

我想检查room1是否存在。 我尝试过以下方法:

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

在访问snap.value时,它会返回该房间属性的JSON,但我如何检查房间(/rooms/room1/)是否在那里开始?

评论是否需要澄清

6 个答案:

答案 0 :(得分:64)

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


    })

答案 1 :(得分:14)

answer of @ismael33有效时,它会下载所有<html> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> var limit = 3; $('input.ko_chk').on('change', function(evt) { if($(this).siblings(':checked').length >= limit) { this.checked = false; } }); </script> <body> <input type="checkbox" class="ko_chk" name="first" value="1"><br> <input type="checkbox" class="ko_chk" name="second" value="2"><br> <input type="checkbox" class="ko_chk" name="third" value="3"><br> <input type="checkbox" class="ko_chk" name="fourth" value="4"> </body> </html> 以检查rooms是否存在。

以下代码完成相同的操作,但只下载room1来执行此操作:

rooms/room1

答案 2 :(得分:7)

我有一些使用firebase的建议。你可以从firebase查看。

我们可以使用DataSnapshot方法测试exists()中某些键的存在:

  

DataSnapshot 包含Firebase数据库位置的数据。任何   当您从Firebase数据库中读取数据时,您将收到数据   DataSnapshot。

     

将DataSnapshot传递给您使用on()附加的事件回调   或once()。您可以将快照的内容提取为   JavaScript对象通过调用其val()方法。或者,你可以   通过调用child()来返回子节点来遍历快照   快照(然后您可以调用val())。

     

DataSnapshot是一种高效生成的,不可变的数据副本   在数据库位置。它们无法修改,永远不会改变。   要修改数据,请始终直接使用Firebase参考。

exists() - 如果此DataSnapshot包含任何数据,则返回true。它比使用快照稍微有效。val() !== null.

firebase文档示例(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)
}); 

另请参阅此page(已在评论中提及)

这里有一个使用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) {
    }
});

我希望你现在有了一个主意。

答案 3 :(得分:1)

您可以查看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);
}];

答案 4 :(得分:0)

使用其中任何一个如此简单易行...... 你喜欢哪种方式

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

答案 5 :(得分:0)

users = new HashMap<>();
                users.put("UserID", milisec);
                users.put("UserName", username);
                users.put("UserEmailID", email);
                users.put("UserPhoneNumber", phoneno);
                users.put("UserPassword", hiddenEditPassword);
                users.put("UserDateTime", new Timestamp(new Date()));
                users.put("UserProfileImage", " ");

                FirebaseFirestore.getInstance().collection("Users").document(phoneno).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                        if (task.getResult().exists()) {
                            Toast.makeText(SignupActivity.this, "Already User", Toast.LENGTH_SHORT).show();

                        } else {
                            FirebaseFirestore.getInstance().collection("Users")
                                    .document(phoneno).set(users).addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    Toast.makeText(SignupActivity.this, "Registers", Toast.LENGTH_SHORT).show();

                                }
                            });
                        }
                        hideProgressDialog();
                    }
                });`
enter code here