Node JS 和 Firebase 无法使用 equal.To() 进行搜索

Node JS and Firebase Unable to Search Using equal.To()

我已经开始阅读如何使用 Node 创建 Google 操作。JS/Dialogflow/Firebase。

我遇到了一个很大的绊脚石,试图获得一个简单的代码 运行 来搜索 Firebase 数据库中的特定值,然后返回报告。例如,从 JSON 输出中,我想搜索 applicationID 并将年龄作为输出传回。

如果有人可以查看我的代码并指导我正确的方向,我将不胜感激。

Table结构

{
  "groupA" : {
    "applications" : {
      "100" : {
        "age" : 20,
        "result" : "pass"
      },
      "200" : {
        "age" : 25,
        " result " : "pass"
      },
      "500" : {
        "age" : 20,
        " result " : "fail"
      }
    }
  }
}

节点JS

    return admin.database().ref('groupA').child('applications').orderByChild('applications').equalTo(500)
                  .once('value')
                  .then(acceptedApplicationsSnapshot => {
       var id = acceptedApplicationsSnapshot.val().age;
      var data = acceptedApplicationsSnapshot.val();
   var theAge = acceptedApplicationsSnapshot.child("age").val();
      agent.add('some random text' + theAge);
    });

在此示例中,应使用年龄搜索值 500,然后将其作为输出。

要搜索 applicationsID=500 并将 age 作为输出传回,您可以试试这个。

var db = admin.database();
var ref = db.ref("groupA").child("applications/500").once('value')
     .then(function(dataSnapshot){
          console.log(dataSnapshot.val().age);
});

更多信息 here.

编辑: 这应该给你年龄,在这种情况下等于 20,对于你传入的参数 applications/500 在上面的代码中。

如果有帮助请告诉我。

您在 属性 applications 上 ordering/filtering,但您传递的值是 。所以你会想要使用 orderByKey 而不是 orderByChild:

return admin.database().ref('groupA').child('applications').orderByKey().equalTo(500)

一个查询可能匹配多个子节点,所以上面的return是一个包含结果列表的快照。即使只有一个结果,查询也会 return 一个结果列表:

{
  "500": {
    "age" : 20,
    " result " : "fail"
 }
}

这意味着您需要在回调中遍历结果:

acceptedApplicationsSnapshot.forEach(appSnapshot => {
  var theAge = appSnapshot.child("age").val();
  agent.add('some random text' + theAge)
})

既然你知道你想要的子节点的确切键,你也可以简单地继续使用child()访问特定节点:

return admin.database().ref('groupA').child('applications').child('500')

这将导致return编辑该特定节点的快照,而不是前一个片段的列表和单个子节点。

{
    "age" : 20,
    " result " : "fail"
}

然后您可以使用现有代码从快照中检索 age