在使用实时更新时,如何检查云火灾恢复文档是否存在

这种方法是有效的:

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 的一个浪费的电话。

还有更好的办法吗?

130708 次浏览

您最初的方法是正确的,但是将文档引用分配给如下变量可能不那么冗长:

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
}
});

参考资料: 拿份文件来

如果您像我一样正在使用 PHP-Firest 集成,请编写如下代码:

$firestore = new FirestoreClient();
$document = $firestore->document('users/john');
$snapshot = $document->snapshot();


if ($snapshot->exists()) {
echo "John is there!";
}

好好享受吧

请检查以下代码。它可能会帮助你。

 const userDocRef = FirebaseFirestore.instance.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());
}

我知道现在很晚了,但这是快照,空的,不是快照,是存在的。 Void 检查文档是否存在并相应地返回

请注意,在 Firebasev9(模块化 SDK)中,按照 医生exists是一个方法,而不是一个属性(它将始终给出 falsy结果)。