firestore where()按上下文提供程序next.js的字段过滤集合

mbzjlibv  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(125)

我有一个问题如下:
我正在通过useEffect函数检索我的firestore文档,它工作得很好。现在我正在检索所有“profiles”文档(此时有3个)。但现在我只想检索文档,其中字段“workerProfile”为true。我有2个文档为false,1个文档为true,所以它应该只显示一个包含1个文档的数组。
当在firebase控制台中手动这样做时,它正在工作。

下面是我的useEffect函数与,where('workerProfile', '==', true),这是不工作,但也没有给出任何错误。

useEffect(() => {
        const getProfiles = async () => {
            const querySnapshot = await getDocs(collection(fireDb, "profiles"),where('workerProfile', '==', true))
            console.log(querySnapshot, "CHECK OUT")
            setProfiles(querySnapshot.docs.map(doc => {
                return {
                    id: doc.id,
                    data: {
                        userProfileUrl: doc.data().userProfileUrl,
                        displayName: doc.data().displayName,
                        likesCount: doc.data().likesCount,
                        bio: doc.data().bio
                    }
                }
            }))
        }
        getProfiles()
    }, [])

但我的console.log(querySnapshot, "CHECK OUT")仍然显示所有3个配置文件,而不是只显示1个。

我已经试着从firebase文档中找到一些提示,但是我仍然不知道,为什么它不工作。也许我在这里错过了什么?
如果有人能在这里帮我我会非常感激的,因为这已经开始让我很恼火了。
我和

  • 防火墙9.14.0
  • 防火墙管理^11.2.1
  • firebase函数^4.0.2
  • 下一版本13.0.2
  • React:18.2.0

以下是我的完整上下文文件,以获取更多信息:

import { createContext, useEffect, useState, useContext } from "react"
import { collection, getDocs, getDoc, doc, where, query, setDoc } from "firebase/firestore"
import { fireDb } from "../../firebaseClient"

const FantsyContext = createContext()

const FantsyProvider = ({ children }) => {

    const [users, setUsers] = useState([])
    const [currentLoggedUser, setCurrentUser] = useState([])
    const [profiles, setProfiles] = useState([])

    // GET USERS
    useEffect(() => {
        const getUsers = async () => {
            const querySnapshot = await getDocs(collection(fireDb, "users"))
            setUsers(querySnapshot.docs.map(doc => {
                return {
                    id: doc.id,
                    data: {
                        ...doc.data()
                    }
                }
            }))
        }
        getUsers()
    }, [])

    // GET PROFILES
    useEffect(() => {
        const getProfiles = async () => {
            const querySnapshot = await getDocs(collection(fireDb, "profiles"),where('workerProfile', '==', true))
            console.log(querySnapshot, "CHECK OUT")
            setProfiles(querySnapshot.docs.map(doc => {
                return {
                    id: doc.id,
                    data: {
                        userProfileUrl: doc.data().userProfileUrl,
                        displayName: doc.data().displayName,
                        likesCount: doc.data().likesCount,
                        bio: doc.data().bio
                    }
                }
            }))
        }
        getProfiles()
    }, [])

    return (
        <FantsyContext.Provider
            value={{ profiles, users }}
        >{children}</FantsyContext.Provider>
    )
}


export { FantsyContext, FantsyProvider }
3zwjbxry

3zwjbxry1#

尝试

await getDocs(query(collection(fireDb, "profiles"), where('workerProfile', '==', true)))

我认为您刚刚使用了getDocs(collection(<ref>, <collection name>)),因此getDocs()函数忽略了其余参数(where()查询)。
因此,在getDocs()中使用query()函数。

相关问题