我有两个文件,目前我可以独立查看文件,并且各自的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])
1条答案
按热度按时间vof42yt11#
使用
const collectionRef = collection(db,
dentist/${id})
定义CollectionReference
无法工作,因为存在偶数个路径段。必须有奇数个路径段,例如collId
或collId/docId/suCollId
或或collId/docId/suCollId/subDocId/subSubCollId
等...因此,如果在一个集合中,你知道一个文档的ID,该文档具有给定的
regNo
值,并且想要获取集合中的所有兄弟文档,你需要在regNo
上使用where
子句查询整个集合。换句话说,您需要:
1.根据第一个文档的ID获取其
regNo
值1.使用此值可查询整个集合
1.识别查询结果中不是第一个文档的所有文档(根据初始文档ID,在前端使用循环完成)