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
。
我已经开始阅读如何使用 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
。