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

Hid*_*n14 35 firebase swift firebase-realtime-database

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

我的数据库结构如下

- / (root)
-   /users/
–-    /james/
--    /jake/
-   /rooms/
--    /room1/
---      (room 1 properties)
--    /room2/
---      (room 2 properties)
Run Code Online (Sandbox Code Playgroud)

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

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

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

评论是否需要澄清

小智 69

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


    })
Run Code Online (Sandbox Code Playgroud)

  • 如果你要检查的对象的parrent里面有很多数据怎么办?这一切都会被下载吗? (2认同)

Fra*_*len 20

虽然@ ismael33答案有效,但它会下载所有内容rooms以检查是否room1存在.

以下代码完成相同的操作,但只有下载rooms/room1才能执行此操作:

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


Ren*_*V R 7

我有一些建议使用firebase.你从firebase检查它.

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

一个DataSnapshot包含从数据库火力地堡的位置数据.每次从Firebase数据库读取数据时,都会将数据作为DataSnapshot接收.

DataSnapshot将传递给您附加的事件回调on()once().您可以通过调用其val()方法将快照的内容提取为JavaScript对象.或者,您可以通过调用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)
}); 
Run Code Online (Sandbox Code Playgroud)

另请参阅此页面(已在我的评论中提及)

这里有一个使用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) {
    }
});
Run Code Online (Sandbox Code Playgroud)

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