如何在firebase中查询给定键的多个值

时间:2018-01-12 22:34:12

标签: javascript firebase firebase-realtime-database

我试图使用' 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));
      });
  };
}; 

2 个答案:

答案 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