Firebase如何基于多个条件进行查询?

How to query based on multiple conditions in Firebase?

我有以下结构:

{
  "users" : {
    "123" : {
      "activities" : {
        "horse" : "horse",
        "bike" : "bike"
      },
      "age" : 21
    },
    "124" : {
      "activities" : {
        "bike" : "bike"
      },
      "age" : 30
  }
}

我正在尝试做类似的事情:

SELECT * FROM users WHERE (activities = 'horse' OR activities = 'bike') AND age >= 21

我能得到一些关于这方面的建议吗?如果我没有正确构建数据,我也可以在那里获得一些提示吗?

编辑:jsfiddle

我会将此问题标记为重复,但此代码可能有助于您开始构建自己的搜索索引:

var ref = new Firebase('https://yours.firebaseio.com/users');
var index = new Firebase('https://yours.firebaseio.com/index');
function createIndex() {
    ref.once('value', function(snapshot) {
        snapshot.forEach(function(userSnapshot) {
            var user = userSnapshot.val();
            index.child(user.age).child(userSnapshot.key()).set(true);
            Object.keys(user.activities).forEach(function(activity) {
                index.child(activity).child(userSnapshot.key()).set(true);
            });
        });
    });
}

由于您想搜索所有用户,因此代码会遍历所有用户(您通常应该在添加或修改用户时执行此操作,因此通过监听 child_ 事件)。然后它将相关节点添加到索引中:一个用于年龄,一个用于每个类别。

在您的数据 运行 之后,index 节点如下所示:

{
  "21": {"123":true},
  "30":{"124":true},
  "bike":{"124":true},
  "horse":{"123":true}
}

因此,您可以通过以下方式获取 20 到 30 岁之间的所有用户:

ref.orderByKey().startAt("20").endAt("30").on('child_added'

或所有具有 "horse" activity 的用户:

ref.orderByKey().equalTo("horse").on('child_added'