我需要查找Firebase中是否存在其某个字段中具有特定价值的子项。
以下是我的数据库结构:
答案 0 :(得分:1)
要检查字段是否存在,您可以执行以下操作:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("bdxhATalcDRJCiZZcUFUJo3yrJF2");
ref.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
//then it exists
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
这将检查是否
child("bdxhATalcDRJCiZZcUFUJo3yrJF2")
存在于数据库中。
如果你这样做:
ref=FirebaseDatabase.getInstance().getReference().child("bdxhATalcDRJCiZZcUFUJo3yrJF2").orderByChild("chat_id").equalTo(chatid);
然后它将检查该子项是否也存在于数据库中
答案 1 :(得分:0)
public class SurveyAnswerVM{
[Key]
public int Id { get; set; }
public string Value { get; set; }
[Remote("HasSubmitted", "ControllerName")]
public string SubmittedBy { get; set; }
public int SurveyId { get; set; }
public int QuestionId { get; set; }
public virtual Survey Survey { get; set; }
public virtual SurveyQuestion Question { get; set; }
public string Comment { get; set; }
}
答案 2 :(得分:0)
在您的情况下,您将设置如下查询:
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Query query = reference.orderByChild("chat_id").equalTo("CHAT_ID_To_COMPARE");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot issue : dataSnapshot.getChildren()) {
// do something with the individual object
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这会在服务器端过滤您的数据,而无需在应用端过滤数据。
答案 3 :(得分:0)
etEmail是一个EditText
我这样做是出于userEmail的价值...因为除了电子邮件外,我没有其他用户名。
对于这样的结构...
"users": {
pushId: {
"userEmail": {
}
}
}
onCreate
etEmail.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(final CharSequence s, int start, int before, int count) {
//yourFunction();
DatabaseReference databaseUsers = FirebaseDatabase.getInstance().getReference().child("users");
databaseUsers.orderByChild("userEmail").equalTo(String.valueOf(s))
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot issue : dataSnapshot.getChildren()) {
// do something with the individual object
//User email already exists
//do something
//return; stops the function from executing further
return;
}
} else {
// email doesn't exists.
// do something
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void afterTextChanged(Editable s) {
}
});
答案 4 :(得分:-1)
当您执行参考并且拥有DataSnapshot
时,可以这样检查:
yourref.child("chat_id").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.exists()) {
//Do something
}
}
存在()
如果快照包含非空值,则返回true。
如果此DataSnapshot
包含任何数据,也会返回true。它比使用DataSnapshot.getValue() !== null
稍微高效。