Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Firebase中基于多个条件进行查询?_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

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

Javascript 如何在Firebase中基于多个条件进行查询?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我的结构如下: { "users" : { "123" : { "activities" : { "horse" : "horse", "bike" : "bike" }, "age" : 21 }, "124" : { "activities" : { "bike" : "bike" }, "age" : 30 } } 我正在尝试做类似的事情

我的结构如下:

{
  "users" : {
    "123" : {
      "activities" : {
        "horse" : "horse",
        "bike" : "bike"
      },
      "age" : 21
    },
    "124" : {
      "activities" : {
        "bike" : "bike"
      },
      "age" : 30
  }
}
我正在尝试做类似的事情:

从(活动='horse'或活动='bike')、年龄>=21的用户中选择*

我能得到一些关于这个的建议吗?如果我没有正确地组织数据,我还能从那里得到一些提示吗


编辑:

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

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);
            });
        });
    });
}
由于您希望在所有用户之间进行搜索,因此代码会在所有用户之间循环(您通常应该在添加或修改用户时执行此操作,因此可以通过侦听
子事件来执行此操作)。然后将相关节点添加到索引中:一个用于年龄,一个用于每个类别

对数据运行此操作后,
索引
节点如下所示:

{
  "21": {"123":true},
  "30":{"124":true},
  "bike":{"124":true},
  "horse":{"123":true}
}
因此,您可以通过以下方式获得20到30岁之间的所有用户:

ref.orderByKey().startAt("20").endAt("30").on('child_added'
或通过以下方式使用“horse”活动的所有用户:

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

Firebase查询只能按单个属性排序/筛选。在某些情况下,您可能可以将条件合并到单个属性中,但在这里似乎不可能。我已经查看了你发送的链接,但由于某些原因,我无法使用该代码逻辑。虽然我理解这个想法。要么api同时改变了,要么什么的,但我不能得到我的结果去过滤。我觉得可以自由分享你的代码,最好是把它编辑成你的问题。一个JSFIDLE会更好。@FrankvanPuffelen看我的例子。现在它返回所有。我尝试了
.startAt('letsGame').endAt('letsGame')
equalTo('letsGame')
,但没有结果您只能查询一级深度的属性。谢谢你,弗兰克,我会试试的