如何查询Firebase返回属性值等于A或B的对象?

时间:2017-08-30 19:08:32

标签: firebase firebase-realtime-database

我在Firebase中的数据为:

video 1
 - lang: en

video 2
 - lang: zh

video 3
 - lang: fi
....

我想查询并返回lang值为enzh的对象列表。

我发现使用

  orderByChild: "lang",
  equalTo: "en"

但是这个查询只返回" en"的对象,如何返回" en"或" zh"?

1 个答案:

答案 0 :(得分:1)

由于Firebase是NoSQL数据库,因此没有WHERE子句听起来像这样:

SELECT * FROM Video WHERE lang='en' OR lang='zh'

很遗憾,Firebase不允许多个查询可以满足您的需求。你可以做的是使用两次same reference上等于所需语言的排序查询。这些查询应如下所示:

.yourRef.orderByChild("lang").equalTo("en");
.yourRef.orderByChild("lang").equalTo("zh");

现在,您可以将两个查询的结果组合在一起并在用户端显示。如果您需要使用两种以上的语言查询数据库,那么我建议您稍微更改数据库的结构。您需要创建另一个名为languages的节点,您可以在其中添加每种特定语言的可用视频。新结构应如下所示:

Firebase-root
    |
    --- languages
           |
           --- en
           |    |
           |    --- video1: true
           |
           --- zh
           |    |
           |    --- video2: true
           |
           --- fi
                |
                --- video3: true
                |
                --- video4: true

通过这种方式,您可以添加所需语言的监听器并查看所有可用的视频。正如弗兰克所说,普通查询会更快。

希望它有所帮助。