Firestore 数据库:如何在多个文档中搜索电子邮件

问题描述 投票:0回答:2

我需要找到文档的 ID,我必须通过比较每个文档包含的电子邮件来完成此操作。

这是我的数据库:

enter image description here

例如,我知道电子邮件“[email protected]”,但我不知道该电子邮件位于哪个文档中,我必须执行什么查询来搜索每个文档,直到找到包含该电子邮件的文档?

javascript reactjs firebase google-cloud-firestore
2个回答
0
投票

您只需要有一个子集合引用,即

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]");

有关更多信息,您可能需要查看此文档


0
投票

这是一个完整的打字稿函数,如果找不到任何一个,则仅返回一个

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
}
© www.soinside.com 2019 - 2024. All rights reserved.