GoogleのFirebaseでRealtime Databaseを使用していますが、子供が存在するかどうかを確認しようとしています。
私のデータベースは次のように構成されています
- / (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/
)があるかどうかを確認するにはどうすればよいですか?
明確化が必要な場合はコメントする
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")
}
})
@ ismael33の答え は機能しますが、room1
が存在するかどうかを確認するためにすべてのrooms
をダウンロードします。
次のコードでも同じことが実現されますが、ダウンロードするのは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")
}
})
Firebaseを使用していくつかの提案があります。firebaseから確認してください。
exists()
メソッドを使用して、DataSnapshot
内の特定のキーの存在をテストできます。
DataSnapshotには、Firebaseデータベースの場所からのデータが含まれます。 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)
});
また、これを参照してください ページ (すでに私のコメントで言及されています)
ここに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) {
}
});
アイデアが得られたと思います。
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);
}];
それらのいずれかを使用してとてもシンプルで簡単...あなたが好きな方法
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) {
}
});