2016-05-24 99 views
23

我正在将实时数据库与Google的Firebase配合使用,并试图检查是否存在小孩。如何检查Firebase数据库值是否存在?

我的数据库的结构如下所示

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

我想检查是否存在会议室1。 我曾尝试以下:

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/)是那里开始?如果任何澄清是通过使用firebase.You从火力检查,它需要

评论

+0

@yahoo我将如何访问它?我无法看到它在Swift文档中的位置。 – Hidden14

+0

请参阅此。 https://gist.github.com/anantn/4323949 –

回答

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

这个代码是为Firbase 3(最后一个...可能2016) – ismael33

+0

你也可以检查是否有haschildren()的房间,如果它是假的,它根本没有空间...... – ismael33

+1

如果你想检查的对象的内容中有很多数据会怎么样?它会全部下载吗? – rhcpfan

6

我有一些建议。

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

DataSnapshot含有来自火力地堡数据库的位置数据。从Firebase数据库读取数据时,如果有任何 ,您会收到数据为 DataSnapshot。

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

DataSnapshot是一个有效生成的数据库位置的数据 的不可变副本。他们不能修改,永远不会改变。 要修改数据,您总是直接使用Firebase参考。

exists() - 如果此DataSnapshot包含任何数据,则返回true。它比使用快照效率稍高。从火力文档(JavaScript示例)val() !== null.

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

我希望你现在有了一个想法。

+0

我明白你在说什么,但我正在寻找Firebase 3.我应该指定。感谢你的回答。 – Hidden14

0

您可以检查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); 
}]; 
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) { 
    } 
}); 
相关问题