【问题标题】:How to check for an empty document on Firestore?如何检查 Firestore 上的空文档?
【发布时间】:2018-07-27 11:26:15
【问题描述】:

所以我试图删除Firebase Firestore 上不包含任何字段的文档。但是如何在删除之前检查文档是否不包含数据呢?

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    要解决这个问题,您应该从数据库中以Map 的形式获取数据:

    yourDocumentReference.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document.exists()) {
                    Map<String, Object> map = document.getData();
                    if (map.size() == 0) {
                        Log.d(TAG, "Document is empty!");
                    } else {
                        Log.d(TAG, "Document is not empty!");
                    }
                }
            }
        }
    });
    

    仅检查文档是否存在并不意味着它是空的。该文档可以存在(如您的屏幕截图中),但没有设置属性。因为 Cloud Firestore 数据库中的每个文档都是一个 Map,所以您可以使用size() 方法查看是否为空。

    【讨论】:

      【解决方案2】:

      为了检查Documentincoming是否为空,可以查看存储对象的key个数。如果存储了0个key,则可以删除该文档。

      Typescript 中的示例代码:

      const doc = await firestore()
                  .collection('Collection')
                  .doc('incoming')
                  .get();
      
      const numberOfKeys = Object.keys(doc.data()).length;
      
      if (numberOfKeys === 0) {
          await firestore()
          .collection('Collection')
          .doc('incoming')
          .delete();
      

      【讨论】:

        【解决方案3】:

        我使用 whereEqualsTo 但你可以使用任何查询:

         FirebaseFirestore db = FirebaseFirestore.getInstance();
            Query docRef = db.collection("rewards").whereEqualTo("adminId", Common.currentUser.getContact());
            docRef.addSnapshotListener((value, error) -> {
                if (value.getDocuments().size() == 0) {
                    Snackbar snackbar = Snackbar.make(findViewById(R.id.content), "Empty", Snackbar.LENGTH_LONG);
                    snackbar.show();
                }
        

        对我有用

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-07-22
          • 2021-10-20
          • 1970-01-01
          • 1970-01-01
          • 2021-11-25
          • 2019-04-14
          • 1970-01-01
          相关资源
          最近更新 更多