javascript - 按多个字段过滤 Firebase

标签 javascript reactjs firebase firebase-realtime-database

我正在尝试使用多个字段来过滤 Firebase。这或多或少是我在 Firebase 中的目标:

{
    "id": "-id",
    "category": "History",
    "level": "High School",
    "pointAmount": 128,
    "pointBoost": 0,
    "photoURL": "link"
},
{
    "id": "-id",
    "category": "Physics",
    "level": "Primary School",
    "pointAmount": 128,
    "pointBoost": 0,
    "photoURL": "link"
}

我现在正在做的,是在 React 中使用一组复选框来获取要过滤的级别类别。这部分就完成了。我的问题是,如何过滤来自数据库的元素?这就是我现在正在做的:

componentDidMount() {
    const assignmentsRef = firebase
        .database()
        .ref('Works')
        .orderByChild('available')
        .equalTo(true)
        .limitToFirst(9);
    assignmentsRef.on('value', snapshot => {
        let assignments = snapshot.val();
        let newState = [];
        for (let assignment in assignments) {
            newState.push({
                id: assignment,
                category: assignments[assignment].category,
                level: assignments[assignment].level,
                pointAmount: assignments[assignment].pointAmount,
                pointBoost: assignments[assignment].pointBoost,
                photoURL: assignments[assignment].photoURL,
                workText: assignments[assignment].workText,
            });
        }
        this.setState({
            assignments: newState
        });
    });
}

如您所见,我已经在执行 orderByChild 了。此外,还会有多个可供过滤的变量。例如:如果我选择 HistoryPhysics 我将获得这两个对象。如果我选择 HistoryPrimary School,则相同,但如果我选择 Physics,我应该只获得第二个对象。我怎样才能过滤它?将有超过 10 个过滤器。

最佳答案

看起来您正在尝试对这两个条件进行OR。对于退回符合多个条件之一的商品,没有任何内置支持。您必须为每个条件触发单独的查询,然后合并来自客户端的所有查询的结果。这并不像您想象的那么慢,因为 Firebase will pipeline the queries over a single connection .

关于javascript - 按多个字段过滤 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51190863/

相关文章:

javascript - react : can you import component with a different name?

javascript - react 组件与两组 child

Swift 将 Eureka 日期转换为 String 以进行 firebase 存储

javascript - 如何知道 jQuery 函数何时完成

javascript - 在一个查询中更新多个表

javascript - 以编程方式调整文本区域的大小而不修改最小大小

javascript - 如何仅将 Prop 传递给 React 元素数组中的第一个元素?

firebase - Flutter Firebase 存储不工作 : no default bucket

javascript - 在 AWS Lambda 中监听 Firebase 数据库超时

javascript - JavaScript 代理是否应该拦截对底层对象(如 Object.Observe)的直接更改?