【问题标题】:How to query multiple values for a given key in firebase如何在firebase中查询给定键的多个值
【发布时间】:2018-01-15 17:07:02
【问题描述】:

我试图在equalTo() 方法中使用'OR' || 语句,但这似乎不起作用。我是否必须对每个值进行单独调用,还是有办法在 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));
      });
  };
}; 

【问题讨论】:

  • Firebase 不提供使用条件查询的方法。请查看this answer 了解更多详情。
  • 您可能还想看看Firestore,它提供了比实时数据库更好的查询功能
  • firestore 是否足够稳定,可以在生产环境中使用?我看到它仍处于测试阶段,所以我有点厌倦了。
  • @RosárioPereiraFernandes 不幸的是Firestore also doesn't support OR conditions

标签: javascript firebase firebase-realtime-database


【解决方案1】:

您在此处键入的内容是编程语言解释的 JavaScript 的逻辑 OR。表达式的结果:

'one-act-play' || 'ten-min-play' || 'full-length-play'

很简单:

'one-act-play'

因此,Firebase 实时数据库不会看到您要告诉它的内容。

Firebase 实时数据库不存在包含 OR 的查询的概念。您必须分别查询每种类型的事物,并根据需要将它们合并到您的代码中。

【讨论】:

  • Firebase 目前没有最好的查询可能性,因此您必须牢记这一点。这就是我们切换到 Mongo 的原因。
【解决方案2】:

没有你要求做的事情的概念。您可以转一圈,在其中您可以使用 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

【讨论】:

    猜你喜欢
    • 2016-10-09
    • 2017-08-16
    • 1970-01-01
    • 2018-06-11
    • 2017-10-13
    • 2016-09-30
    • 2018-11-29
    • 1970-01-01
    • 2020-02-20
    相关资源
    最近更新 更多