使用 firebase 进行动态查询
Dynamic querying using firebase
我有这个用例,我必须根据用户以对象形式发送的参数进行查询。用户可以发出多个参数进行查询。它类似于 "SELECT * FROM users WHERE FIRST_NAME = 'something' AND LAST_NAME = 'something'" 在 SQL.
中的内容
示例对象可以是:
var object= {
email: "some...@google.com",
location: "San Jose, CA"
};
我在某个端点的 firebase 数据中有这些字段(电子邮件和位置)让我们称之为 /users
所以用户端点看起来像:
{
"randomID1":{
email: "some...@google.com",
location: "San Jose, CA"
},
"randomID2":{
email: "anothe...@fb.com",
location: "Menlo Park, CA"
}
}
我必须使用上面提到的对象并为 firebase 动态生成查询,这是我所拥有的:
return $q(function(resolve, reject) {
ref.orderByChild("email");
for(var key in filterObject){
if(filterObject.hasOwnProperty(key)){
console.log("Key: ",key);
console.log("Value: ",filterObject[key]);
ref.equalTo(""+filterObject[key],""+key);
}
}
return ref.on("value", function (snapshot) {
resolve(snapshot.val());
}, function (errorObject) {
reject(errorObject);
});
});
这总是 returns 我所有的数据,并没有真正过滤任何东西。任何人都可以在这里提供建议吗?我是 firebase 的新手,抱歉,如果这是一个天真的问题。
谢谢
经过一番尝试,我找到了答案。
基本上,Firebase 不允许查询多个 属性,所以我在第一个 属性 上查询 firebase,如果还有更多属性要查询,我使用下划线 js 过滤那些剩余的特性。
代码如下所示:
return $q(function(resolve, reject) {
var query = ref ;
for(var key in filterObject){
if(filterObject.hasOwnProperty(key)){
query = query.orderByChild(key);
query = query.equalTo(filterObject[key]);
delete(filterObject[key]);
break; //break out after querying the first property in firebase
}
}
return query.on("value", function (snapshot) {
var objects = snapshot.val();
var result = _.filter(objects, function(obj){
return _.isMatch(obj, filterObject); //for all other objects I use underscorejs to filter
});
resolve(result);
}, function (errorObject) {
reject(errorObject);
});
});
我有这个用例,我必须根据用户以对象形式发送的参数进行查询。用户可以发出多个参数进行查询。它类似于 "SELECT * FROM users WHERE FIRST_NAME = 'something' AND LAST_NAME = 'something'" 在 SQL.
中的内容示例对象可以是:
var object= {
email: "some...@google.com",
location: "San Jose, CA"
};
我在某个端点的 firebase 数据中有这些字段(电子邮件和位置)让我们称之为 /users
所以用户端点看起来像:
{
"randomID1":{
email: "some...@google.com",
location: "San Jose, CA"
},
"randomID2":{
email: "anothe...@fb.com",
location: "Menlo Park, CA"
}
}
我必须使用上面提到的对象并为 firebase 动态生成查询,这是我所拥有的:
return $q(function(resolve, reject) {
ref.orderByChild("email");
for(var key in filterObject){
if(filterObject.hasOwnProperty(key)){
console.log("Key: ",key);
console.log("Value: ",filterObject[key]);
ref.equalTo(""+filterObject[key],""+key);
}
}
return ref.on("value", function (snapshot) {
resolve(snapshot.val());
}, function (errorObject) {
reject(errorObject);
});
});
这总是 returns 我所有的数据,并没有真正过滤任何东西。任何人都可以在这里提供建议吗?我是 firebase 的新手,抱歉,如果这是一个天真的问题。
谢谢
经过一番尝试,我找到了答案。 基本上,Firebase 不允许查询多个 属性,所以我在第一个 属性 上查询 firebase,如果还有更多属性要查询,我使用下划线 js 过滤那些剩余的特性。
代码如下所示:
return $q(function(resolve, reject) {
var query = ref ;
for(var key in filterObject){
if(filterObject.hasOwnProperty(key)){
query = query.orderByChild(key);
query = query.equalTo(filterObject[key]);
delete(filterObject[key]);
break; //break out after querying the first property in firebase
}
}
return query.on("value", function (snapshot) {
var objects = snapshot.val();
var result = _.filter(objects, function(obj){
return _.isMatch(obj, filterObject); //for all other objects I use underscorejs to filter
});
resolve(result);
}, function (errorObject) {
reject(errorObject);
});
});