如何检查firestore中是否存在该字段?

问题描述 投票:0回答:8

我正在检查名为

attending
的布尔字段是否存在,但我不知道该怎么做。

有没有诸如

.child().exists()
之类的功能或类似的功能我可以使用?

firebaseFirestore.collection("Events")
    .document(ID)
    .collection("Users")
    .get()
    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if(task.isSuccessful()) {
                for(QueryDocumentSnapshot document: task.getResult()){
                    attending = document.getBoolean("attending");
                }
            }
        }
    });
java android firebase google-cloud-firestore
8个回答
5
投票

您可以执行以下操作:

  if(task.isSuccessful()){
    for(QueryDocumentSnapshot document: task.getResult()){
       if (document.exists()) {
          if(document.getBoolean("attending") != null){
             Log.d(TAG, "attending field exists");
          }
        }
      }
  }

来自文档

public boolean exists ()

退货 如果该文档存在于该快照中,则为 true。


4
投票

您现在所做的是正确的 - 您必须阅读文档并检查快照以查看该字段是否存在。 没有比这更短的方法了。


0
投票

这是您如何实现它的方法,或者您可能已经解决了,这对于任何寻求解决方案的人来说。

根据文档:

CollectionReference citiesRef = db.collection("cities");

Query query = citiesRef.whereNotEqualTo("capital", false);

此查询返回首都字段存在且值不是 false 或 null 的每个城市文档。这包括大写字段值等于 true 或除 null 之外的任何非布尔值的城市文档。

了解更多信息https://cloud.google.com/firestore/docs/query-data/order-limit-data#java_5


0
投票

我使用以下布尔方法可能其他人也可以

for(QueryDocumentSnapshot document: task.getResult()){
    if(document.contains("attending")){
           attending = document.getBoolean("attending");
    }
}

0
投票

我没有找到任何解决方案,所以我所做的是尝试 - catch (抱歉 Flutter / Dart,不是 java):

  bool attendingFieldExists = true;
  DocumentSnapshot documentSnapshot = 
  // your Document Query here
  await FirebaseFirestore.instance 
      .collection('collection')
      .doc(FirebaseAuth.instance.currentUser?.uid)
      .get();
  // trying to get "attending" field will throw an exception
  // if not existing
  try {
    documentSnapshot.get("attending");
  } catch (e) {
    attendingFieldExists = false;
    print("oops.. exception $e");
  }

然后您可以根据

attendingFieldExists
调整您想要应用的代码。 我是 Flutter / Dart 的新手,所以不确定这是处理这个问题的最佳方法..但它对我有用。


0
投票

而不是 documentSnapshot.get("出席"); 做这个 documentSnapshot.ContainsField("出席");

如果该字段存在,则返回 true,否则返回 false


0
投票

使用如何:

QueryDocumentSnapshot<Map<String, dynamic>> data = 'some data';

if (data.data().containsKey(fieldName)) {
// do something.
}

-3
投票
You can check firestore document exists using this,

CollectionReference mobileRef = db.collection("mobiles");
 await mobileRef.doc(id))
              .get().then((mobileDoc) async {
            if(mobileDoc.exists){
            print("Exists");
            }
        });
© www.soinside.com 2019 - 2024. All rights reserved.