使用Firebase,如何基于UID创建查询?

时间:2017-09-23 21:25:00

标签: javascript angular firebase firebase-realtime-database

我创建了一个向数据库添加UID以及项目状态的函数:

changestate(item) {

    var postData = {
      state: "listed",
    };

    var user = firebase.auth().currentUser;
    var uid = user.uid;

    var updates = {};
    updates['foods' + '/' + item.$key + '/' + 'state' + '/' + uid] = postData;

    return firebase.database().ref().update(updates);
  }

我想创建一个只显示与该UID对应的数据的查询。在我之前使用的查询中:

getLists(): FirebaseListObservable<any> {
return this.db.list('/foods', {
  query: {
    orderByChild: 'state',
    equalTo: 'listed'
  }
});}

这是我数据库的结构:

{
  "foods" : {
    "foodID1" : {
      "category" : "Produce",
      "foodname" : "Apples",
      "state" : {
        "aePQkvozV6gehP7ihjN0OWCltKu2" : {
          "state" : "listed"
        }
      }
    },
    "foodID2" : {
      "category" : "Dairy",
      "foodname" : "Cheese",
      "state" : {
        "aePQkvozV6gehP7ihjN0OWCltKu2" : {
          "state" : "listed"
        }
      }
    }
  }
}

我需要做些什么才能显示与已登录用户的UID相对应的项目?

1 个答案:

答案 0 :(得分:0)

orderByChild属性可以采用路径。那么代码就这么简单了:

getLists(): FirebaseListObservable<any> {
  return this.db.list('/foods', {
    query: {
      orderByChild: 'state/'+firebase.auth().currentUser.uid+'/state',
      equalTo: 'listed'
    }
  });
}

这要求用户当然已登录。要在没有登录用户的情况下测试查询,可以使用硬编码值:

getLists(): FirebaseListObservable<any> {
  return this.db.list('/foods', {
    query: {
      orderByChild: 'state/aePQkvozV6gehP7ihjN0OWCltKu2/state',
      equalTo: 'listed'
    }
  });
}