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'
我有以下结构:
{
"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'