javascript - 使用 firebase 进行动态查询

标签 javascript angularjs firebase

<分区>

我有一个用例,我必须根据用户以对象形式发送的参数进行查询。用户可以发出多个参数进行查询。它类似于 SQL 中的“SELECT * FROM users WHERE FIRST_NAME = 'something' AND LAST_NAME = 'something'”。

示例对象可以是:

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);
            });
        });

这总是返回我所有的数据,并没有真正过滤任何东西。任何人都可以在这里提供建议吗?我是 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);
            });
        });

关于javascript - 使用 firebase 进行动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33292402/

相关文章:

firebase - 如何将拨动开关按钮从 flutter 添加到 firebase firestore 数据库

javascript - 如何在 WordPress 中链接脚本

javascript - Angular js :-> angular throws unknown provider error while accessing resolve proprerty

javascript - AngularJs如何将一个div插入到另一个div中?

javascript - 用于上传调整大小的图像的服务器代码

swift - 当用户已经通过身份验证时,它会在转到 MainController 之前显示 LoginViewController 大约半秒钟

ios - JSQMessagesViewController + 火力地堡 (3.4.0)

javascript - 注册表未正确处理到数据库(PHP/MySQL)

javascript - polymer 1.0 : How to pass an event to a child-node element without using <iron-signals>?

当表格没有行时,AngularJS 隐藏表格