这有效:
db.collection('users').doc('id').get()
.then((docSnapshot) => {
if (docSnapshot.exists) {
db.collection('users').doc('id')
.onSnapshot((doc) => {
// do stuff with the data
});
}
});
......但似乎很冗长。我试过doc.exists,但那没用。我只想在订阅文档上的实时更新之前检查文档是否存在。那个初始的get似乎是对db的腰部调用。
有更好的方法吗?
答案 0 :(得分:36)
您的初始方法是正确的,但将文档引用分配给变量可能不那么冗长:
const usersRef = db.collection('users').doc('id')
usersRef.get()
.then((docSnapshot) => {
if (docSnapshot.exists) {
usersRef.onSnapshot((doc) => {
// do stuff with the data
});
} else {
usersRef.set({...}) // create the document
}
});
答案 1 :(得分:1)
如果您像我一样使用 PHP-Firestore 集成,请编写如下内容:
$firestore = new FirestoreClient();
$document = $firestore->document('users/john');
$snapshot = $document->snapshot();
if ($snapshot->exists()) {
echo "John is there!";
}
享受吧! o/
答案 2 :(得分:1)
请检查以下代码。或许能帮到你。
const userDocRef = await firestore().collection('collection_name').doc('doc_id');
const doc = await userDocRef.get();
if (!doc.exists) {
console.log('No such document exista!');
} else {
console.log('Document data:', doc.data());
}
答案 3 :(得分:0)
我知道它晚了,但它实际上是 snapshot.empty 而不是 snapshot.exists 。 snapshot.empty 检查文档是否存在并相应返回。快乐编码?
答案 4 :(得分:-1)
如果您使用的是Angular,则可以使用AngularFire软件包以可观察的方式对其进行检查。
import { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/firestore';
constructor(private db: AngularFirestore) {
const ref: AngularFirestoreDocument<any> = db.doc(`users/id`);
ref.get().subscribe(snap => {
if (snap.exists) {
// ...
}
});
}