var docRef = db.collection("cities").doc("SF");
docRef.get().then((doc) => {
if (doc.exists) {
console.log("Document data:", doc.data());
} else {
// doc.data() will be undefined in this case
console.log("No such document!");
}
}).catch((error) => {
console.log("Error getting document:", error);
});
var doc = firestore.collection('some_collection').doc('some_doc');
doc.get().then((docData) => {
if (docData.exists) {
// document exists (online/offline)
} else {
// document does not exist (only on online)
}
}).catch((fail) => {
// Either
// 1. failed to read due to some reason such as permission denied ( online )
// 2. failed because document does not exists on local storage ( offline )
});
mDb.collection("Users").document(mAuth.getUid()).collection("tasks").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
if (task.getResult().isEmpty()){
Log.d("Test","Empty Data");
}else{
//Documents Found . add your Business logic here
}
}
}
});
7条答案
按热度按时间vwkv1x7d1#
看一下this question,
.exists
看起来仍然可以像标准Firebase数据库一样使用。此外,您可以在github here上找到更多讨论这个问题的人文件上说
新示例
旧示例
注意:如果docRef引用的位置没有单据,则结果单据为空,对其进行调用exists返回false。
旧示例2
1sbrub3j2#
如果模型包含太多的字段,在
CollectionReference::get()
结果上应用一个字段掩码会是一个更好的主意(让我们保存更多的google云流量计划,\o/),所以选择使用CollectionReference::select()
+CollectionReference::where()
来只选择我们想从firestore得到的是一个好主意。假设我们有与firestore cities示例相同的集合模式,但文档中的
id
字段具有与doc::id
相同的值,那么您可以执行以下操作:现在我们只下载
city::id
,而不是下载整个文档来检查它是否存在。wr98u20j3#
检查此:)
h5qlskok4#
2022年答案:现在,您可以使用
count()
aggregation检查文档是否存在 * 而无需下载 *。下面是一个TypeScript示例:vmdwslir5#
我最近遇到同样的问题,而使用Firebase Firestore和我使用以下方法来克服它。
task.getResult().isEmpty()提供了一个解决方案,即是否找到了针对我们查询的文档
wi3ka0sx6#
根据你使用的库,它可能是一个可观察的而不是一个承诺。只有一个承诺会有'then'语句。你可以使用'doc'方法而不是collection.doc方法,或者toPromise()等。下面是一个doc方法的例子:
希望这能帮上忙...
9w11ddsr7#
如果出于某种原因你想用一个可观察的和rxjs的Angular 来代替一个承诺: