使用实时更新时如何检查 Cloud Firestore 文档是不是存在
Posted
技术标签:
【中文标题】使用实时更新时如何检查 Cloud Firestore 文档是不是存在【英文标题】:How to check if a cloud firestore document exists when using realtime updates使用实时更新时如何检查 Cloud Firestore 文档是否存在 【发布时间】:2018-04-03 11:14:15 【问题描述】:这行得通:
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 的浪费调用。
有没有更好的办法?
【问题讨论】:
您是要完成插入/更新还是? 现在是db.collection('users').doc('id').ref.get()
【参考方案1】:
您的初始方法是正确的,但是将文档引用分配给如下变量可能会更简洁:
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
);
参考:Get a document
【讨论】:
你拯救了我的一天。谢谢!【参考方案2】:请检查以下代码。它可能会帮助你。
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());
【讨论】:
【参考方案3】:我知道它晚了,但它实际上是 snapshot.empty 而不是 snapshot.exists 。 snapshot.empty 检查文档是否存在并相应地返回。快乐编码?
【讨论】:
【参考方案4】:如果您像我一样使用 php-Firestore 集成,请编写如下内容:
$firestore = new FirestoreClient();
$document = $firestore->document('users/john');
$snapshot = $document->snapshot();
if ($snapshot->exists())
echo "John is there!";
享受吧! o/
【讨论】:
【参考方案5】:请注意,在 Firebase v9(模块化 SDK)中,exists
是一种方法,而不是属性(它会一直为您提供 falsy
结果),如 docs 所述。
【讨论】:
以上是关于使用实时更新时如何检查 Cloud Firestore 文档是不是存在的主要内容,如果未能解决你的问题,请参考以下文章
将新数据添加到特定子项时如何使用 Cloud Functions 将数据写入 Firebase 实时数据库
Firestore / Cloud功能 - 如何在更改时更新Firestore数据
使用 Cloud Firestore 触发器功能时如何获取 dataID?