我正在尝试使用多个字段获取过滤器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中使用一系列复选框来抓取level
和category
进行过滤。这部分完成。我的问题是,如何过滤来自数据库的元素?这就是我现在正在做的事情:
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
。也将有多个变量可供过滤。例如:如果我选择History
和Physics
,我将得到两个对象。如果选择History
和Primary School
,则相同,但是如果选择Physics
,则应仅获得第二个对象。我该如何过滤?将会有超过10个过滤器。
答案 0 :(得分:3)
您似乎要同时对这两个条件进行OR
。对于返回符合多种条件之一的项目没有任何内置支持。您将必须针对每个条件触发一个单独的查询,然后合并客户端所有查询的结果。由于Firebase will pipeline the queries over a single connection,这没有您预期的那样慢。