【问题标题】:How to query in firebase in react?如何在firebase中查询反应?
【发布时间】:2018-06-22 18:29:11
【问题描述】:

我在firebase中有以下数据结构

{
 "users":{
"Arshak Anjum": {
    "UserName": "Arshak Anjum",
    "admin": 0,
    "status": 0,
    "UserId": 959125570900519
 } 
 }
 }

我想查询数据库并仅在该人的状态为 0 时加载页面。
如何设置对用户的引用并按名称查询。
我想查询“Select * from users where id="Arshak Anjum" AND status=1;”
我正在使用反应

var userRef = database.ref('/users/'+authData.displayName);
var user=userRef.where("status","==",1)

此代码不起作用。我是firebase的初学者。 另外我如何在一些操作后将状态更新为 1。

【问题讨论】:

    标签: reactjs firebase-realtime-database


    【解决方案1】:

    您的代码显示了 Cloud Firestore 的查询语法,该语法与 Firebase 实时数据库不兼容。要查询后者,请使用其documentation 中提到的方法。例如:

    var userRef = database.ref('/users/'+authData.displayName);
    var userQuery = userRef.orderByChild("status").equalTo(1);
    userQuery.once("value", function(snapshot) {
      snapshot.forEach(function(child) {
        console.log(child.key, child.val());
      });
    });
    

    【讨论】:

    • 谢谢,但您提供的代码不起作用并返回 null 作为快照。
    • 它可能返回 null 因为没有对象的状态设置为 1 @ArshakAnjum
    • @RosárioPereiraFernandes 那么它将是一个空快照,但不是null。在 null 上调用 forEach 会引发错误。
    • 文档说once() 返回一个Promise。不应该是userQuery.once(...).then(snapshot => {...})吗?
    • once() 返回一个承诺,但也调用一个经典的回调。我在这个答案中使用了后者,因为它最接近您用于 on() 的语法(它不会返回承诺,因为它可能会“解决”多次)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多