我试图使用' OR' ||
方法中的equalTo()
语句,但这似乎不起作用。我是否必须为每个值单独调用,或者是否有办法在firebase中进行条件查询?
export const startSetContent = () => {
return (dispatch, getState) => {
const ref = database.ref("content");
return ref
.orderByChild("category")
.equalTo('one-act-play' || 'ten-min-play' || 'full-length-play')
.once('value')
.then(snapshot => {
const content = [];
snapshot.forEach(childSnapshot => {
content.push({
id: childSnapshot.key,
...childSnapshot.val()
});
});
dispatch(setContent(content));
});
};
};
答案 0 :(得分:2)
您输入的内容是编程语言解释的JavaScript的逻辑OR。表达式的结果:
'one-act-play' || 'ten-min-play' || 'full-length-play'
将简单地说:
'one-act-play'
因此,Firebase实时数据库将无法看到您要告诉它的内容。
Firebase实时数据库没有一种在其中包含OR的查询的概念。您必须分别查询每种类型的事物,并根据需要将它们合并到您的代码中。
答案 1 :(得分:1)
没有你要求做的事情的概念。您可以使用equalTo转换为基于一个过滤器one-act-play
的值,然后您可以在用户端过滤,例如:
export const startSetContent = () => {
return (dispatch, getState) => {
const ref = database.ref("content");
return ref
.orderByChild("category")
.equalTo('one-act-play')
.once('value')
.then(snapshot => {
const content = [];
Object.keys(snapshot.val()).map(k => {
if(k == 'ten-min-play' || k == 'full-length-play'){
snapshot.forEach(childSnapshot => {
content.push({
id: childSnapshot.key,
...childSnapshot.val()
});
});
}
dispatch(setContent(content));
});
};
};
或者您可以使用库来满足此类要求Querybase