firebase 如何使用react Js和Firestore根据集合中的ID查询当前ID以仅显示具有相似字段和值的文档

m4pnthwp  于 2023-06-24  发布在  React
关注(0)|答案(1)|浏览(123)

我有两个文件,目前我可以独立查看文件,并且各自的ID也可以在我的网址中看到。所以我试图实现的是显示我的firebase集合中的文档,它有一个相似的字段,具有相似的值;例如,如果Id(f3 aNQYFyv 9 hpg 0 ZLikWt)中的一个具有字段(regNo)并且另一个Id(Ta 0 yfjgbq 9 B30 OLTnPzx)具有字段(regNo),两者都具有相同的值(regNo:“AFY/2013/6440”)。由于我可以使用useParams从网址中提取当前ID,因此我想将其与集合中的文档进行比较,以检查是否有另一个ID具有来自字段的类似值。目前,我已经从集合中提取了所有文档:

const [data, setData] = useState([]);

 useEffect(() =>{
    // LISTEN (REALTIME)
    const collectionRef = collection(db, "dentist");
    const q = query(collectionRef, orderBy("timeStamp", "asc"))
    const unsub = onSnapshot(
      q,
      (snapShot) => {
        let list = [];
        snapShot.docs.forEach((doc) => {
          list = [{ id: doc.id, ...doc.data() }, ...list]
         
        });
        setData(list);
      },
      (error) => {
        console.log(error);
      }
    );
    
    return () => {
      unsub();
    };
    }, []);

我尝试做的是将当前ID与集合中的所有ID进行比较,以检查哪些文档具有相同的字段值(regNo)。我必须首先检查我是否得到的数据包含那些具有值的类似字段,这是工作的,这里的代码:-

const [data, setData] = useState([]);

    useEffect(()=>{
        const getList = async () => {
            const collectionRef = collection(db, "dentist")
          const q = query(collectionRef, where("regNo", "==", "AFY/2013/6440"))
          await getDocs(q).then((task)=>{
           let medData = task.docs.map((doc) => ({...doc.data(),
          id: doc.id}))
          setData(medData)
          console.log("medData", medData)
          }).catch((err) =>{
            console.log(err)
          })
        }
        getList()
      }, [])

这实际上返回了每个具有该特定regNo的文档,但我希望它将当前ID与集合中的所有ID进行比较,但这并不起作用,而且我不想硬编码regNo值,因为如果我要将当前ID与集合中的其他ID进行比较,它应该循环查看哪些文档共享相同的字段值(regNo)。这是我最终添加的返回错误的内容

const [data, setData] = useState([]);

    const {userId}  = useParams();
    let id = userId

    
    useEffect(()=>{
        const getList = async (id) => {
            const collectionRef = collection(db,`dentist/${id}`)
          const q = query(collectionRef, where("regNo", "==", "check for the same value of regNo(This is a what I want it to do)"))
          await getDocs(q).then((task)=>{
           let medData = task.docs.map((doc) => ({...doc.data(),
          id: doc.id}))
          setData(medData)
          console.log("medData", medData)
          }).catch((err) =>{
            console.log(err)
          })
        }
        getList()
      }, [id])
vof42yt1

vof42yt11#

使用const collectionRef = collection(db,dentist/${id})定义CollectionReference无法工作,因为存在偶数个路径段。必须有奇数个路径段,例如collIdcollId/docId/suCollId或或collId/docId/suCollId/subDocId/subSubCollId等...
因此,如果在一个集合中,你知道一个文档的ID,该文档具有给定的regNo值,并且想要获取集合中的所有兄弟文档,你需要在regNo上使用where子句查询整个集合。
换句话说,您需要:
1.根据第一个文档的ID获取其regNo
1.使用此值可查询整个集合
1.识别查询结果中不是第一个文档的所有文档(根据初始文档ID,在前端使用循环完成)

相关问题