我需要找到文档的 ID,我必须通过比较每个文档包含的电子邮件来完成此操作。
这是我的数据库:
例如,我知道电子邮件“[email protected]”,但我不知道该电子邮件位于哪个文档中,我必须执行什么查询来搜索每个文档,直到找到包含该电子邮件的文档?
您只需要有一个子集合引用,即
patients
,然后使用 where()
方法创建查询来查找具有特定值的 email
字段。不过,我不确定您使用的是哪个版本。我将只提供模块化和命名空间版本。请参阅下面的示例片段:
网页版本 9(模块化):
import { collection, query, where } from "firebase/firestore";
// For `user's-document-id`, I guess you have it.
const patientsRef = collection(db, "users", "<user's-document-id>");
// Create a query against the collection.
const q = query(patientsRef, where("email", "==", "[email protected]"));
Web 版本 8(命名空间):
var patientsRef = db.collection("users").doc("<user's-document-id>").collection("patients);
// Create a query against the collection.
var query = patientsRef.where("email", "==", "[email protected]");
有关更多信息,您可能需要查看此文档。
这是一个完整的打字稿函数,如果找不到任何一个,则仅返回一个
email
或 null
。它使用网络版本(模块化)。它假设您已正确初始化 db
变量。
import { collection, query, where, limit, getDocs } from 'firebase/firestore'
import db from 'my-db-path-here'
async function getUserByEmail(email: string) {
const collectionRef = collection(db, 'users')
const targetQuery = query(collectionRef, where('email', '==', email), limit(1))
const querySnapshot = await getDocs(targetQuery)
if (querySnapshot.empty) return null
const userData = querySnapshot.docs.map((doc) => doc.data())[0]
return userData
}