检查 Firebase 中是否存在具有特定查询的对象
Check if an object with a certain query exists in Firebase
我想检查是否存在将某个 属性 设置为某个值的对象。
以下是我在 Firebase 上的数据示例:
object: {
object-one: {
id: "something"
}
}
现在我想获取一个 ID 不存在的对象:
let objectsRef = FIRDatabase.database().reference().child("object")
let query = objectsRef.queryOrderedByChild("id").queryEqualToValue("something else")
query.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
// Never get's called
})
因为 id = "something else"
没有条目,永远不会调用完成。但是我怎么知道它是因为网络问题没有被调用还是仅仅因为那个对象真的不存在?!?
If no data exists at the location, the snapshot's value will be NSNull
您可以使用 valueEventListner。它获取当前数据并监听任何进一步的更新。如果数据不存在 dataSnapshot.exists() 将 return false.
例如
我的数据库包含用户对象列表,其中 emailId 是每个用户对象中的字段之一。
[
user1: {emailId: abc@xyz.com},
user2: {emailId: abc1@xyz1.com}
]
我可以通过 emailId 字段搜索并检查该用户是否存在。
ref.orderByChild("emailId").equalTo("unavailable@xyz.com").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println(dataSnapshot.exists());//false, if values is not present
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
我想检查是否存在将某个 属性 设置为某个值的对象。
以下是我在 Firebase 上的数据示例:
object: {
object-one: {
id: "something"
}
}
现在我想获取一个 ID 不存在的对象:
let objectsRef = FIRDatabase.database().reference().child("object")
let query = objectsRef.queryOrderedByChild("id").queryEqualToValue("something else")
query.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
// Never get's called
})
因为 id = "something else"
没有条目,永远不会调用完成。但是我怎么知道它是因为网络问题没有被调用还是仅仅因为那个对象真的不存在?!?
If no data exists at the location, the snapshot's value will be NSNull
您可以使用 valueEventListner。它获取当前数据并监听任何进一步的更新。如果数据不存在 dataSnapshot.exists() 将 return false.
例如 我的数据库包含用户对象列表,其中 emailId 是每个用户对象中的字段之一。
[
user1: {emailId: abc@xyz.com},
user2: {emailId: abc1@xyz1.com}
]
我可以通过 emailId 字段搜索并检查该用户是否存在。
ref.orderByChild("emailId").equalTo("unavailable@xyz.com").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println(dataSnapshot.exists());//false, if values is not present
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});