【发布时间】:2018-07-27 11:26:15
【问题描述】:
【问题讨论】:
标签: java android firebase google-cloud-firestore
【问题讨论】:
标签: java android firebase google-cloud-firestore
要解决这个问题,您应该从数据库中以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() 方法查看是否为空。
【讨论】:
为了检查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();
【讨论】:
我使用 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();
}
对我有用
【讨论】: