我正在尝试使用多个字段来过滤 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
了。此外,还会有多个可供过滤的变量。例如:如果我选择 History
和 Physics
我将获得这两个对象。如果我选择 History
和 Primary School
,则相同,但如果我选择 Physics
,我应该只获得第二个对象。我怎样才能过滤它?将有超过 10 个过滤器。
最佳答案
看起来您正在尝试对这两个条件进行OR
。对于退回符合多个条件之一的商品,没有任何内置支持。您必须为每个条件触发单独的查询,然后合并来自客户端的所有查询的结果。这并不像您想象的那么慢,因为 Firebase will pipeline the queries over a single connection .
关于javascript - 按多个字段过滤 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51190863/