我正在尝试通过字段值检索单个文档,然后更新其中的一个字段。
当我执行.where("uberId", "==",'1234567')
时,我将获得字段uberId
与1234567
匹配的所有文档。
我可以肯定只有一个这样的文件。但是,我不想使用uberId作为文档的ID,否则我可以轻松地通过ID搜索该文档。是否有另一种通过字段ID搜索单个文档的方法?
到目前为止,阅读文档,我可以看到以下内容:
const collectionRef = this.db.collection("bars");
const multipleDocumentsSnapshot = await collectionRef.where("uberId", "==",'1234567').get();
然后我想我可以const documentSnapshot = documentsSnapshot.docs[0]
来获取唯一的现有文档参考。
但是我想用以下内容更新文档:
documentSnapshot.set({
happy: true
}, { merge: true })
我遇到错误Property 'set' does not exist on type 'QueryDocumentSnapshot<DocumentData>'
答案 0 :(得分:0)
虽然您可能实际上知道只有一个具有给定uberId
值的文档,但API无法知道这一点。因此,API会为任何查询返回相同的类型:QuerySnapshot
。您将需要遍历该快照中的结果以获取文档。即使只有一个文档,您也需要该循环:
const querySnapshot = await collectionRef.where("uberId", "==",'1234567').get();
querySnapshot.forEach((doc) => {
doc.ref.set(({
happy: true
}, { merge: true })
});
代码.ref
中缺少的是:您无法更新DocumentSnapshot
/ QueryDocumentSnapshot
,因为它只是数据库中数据的本地副本。因此,您需要对其调用ref
以获得对数据库中该文档的引用。
答案 1 :(得分:0)
async function getUserByEmail(email) {
// Make the initial query
const query = await db.collection('users').where('email', '==', email).get();
if (!query.empty) {
const snapshot = query.docs[0];
const data = snapshot.data();
} else {
// not found
}
}