如何查找Firebase中是否存在其字段中具有特定价值的子项?

时间:2018-02-27 11:48:19

标签: android firebase firebase-realtime-database

我需要查找Firebase中是否存在其某个字段中具有特定价值的子项。

以下是我的数据库结构:

image of the database structure

5 个答案:

答案 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稍微高效。