Javascript 如何使用密钥检索firebase中的子数据?
我是firebase的新手。 我想获取子数据和密钥。 以下代码是我在nodejs环境中尝试过的Javascript 如何使用密钥检索firebase中的子数据?,javascript,node.js,firebase,firebase-realtime-database,Javascript,Node.js,Firebase,Firebase Realtime Database,我是firebase的新手。 我想获取子数据和密钥。 以下代码是我在nodejs环境中尝试过的 var firebase = require("firebase"); firebase.initializeApp({ databaseURL: "https://some.firebaseio.com/" }); var customer = firebase.database().ref().child('customer'); cons
var firebase = require("firebase");
firebase.initializeApp({
databaseURL: "https://some.firebaseio.com/"
});
var customer = firebase.database().ref().child('customer');
const fname = "name";
const lname = "title";
customer.orderByChild("partnerFirstName").equalTo(fname).on('child_added', function (snapshot) {
console.log(snapshot.val());
var fn = snapshot.val().partnerFirstName;
var custdata = snapshot.val();
console.log(custdata);
console.log("FirstName:"+fn);
if (custdata.partnerFirstName === fn) {
console.log(custdata);
}
});
结果如下
{
createdAt: '2018-03-20T23:25:35.212Z',
partnerEmail: 'beard@yahoo.com',
partnerFirstName: 'name',
partnerGender: 'male',
partnerLastName: 'title',
partnerPhone: '444-602-4444',
profilePicture: 'assets/profile_icon.png',
uid: 'x99wl8kkmJSENpNdVMXTXCh7amy2' }
FirstName: name
{ '-L84iSPyr9bPvnJZ6BgV':
{
createdAt: '2018-03-20T23:25:35.212Z',
partnerEmail: 'beard@yahoo.com',
partnerFirstName: 'name',
partnerGender: 'male',
partnerLastName: 'title',
partnerPhone: '444-602-4444',
profilePicture: 'assets/profile_icon.png',
uid: 'x99wl8kkmJSENpNdVMXTXCh7amy2' } }
FirstName: undefined
在这种情况下,我们没有得到记录的键值,但是firstname没有任何错误
但是当我们尝试下面的代码时,密钥随数据一起出现,但是firstname是未定义的
var customer = firebase.database().ref().child('customer');
const fname = "Name";
const lname = "Title";
customer.orderByChild("partnerFirstName").equalTo(fname).on('value', function (snapshot) {
console.log(snapshot.val());
var fn = snapshot.val().partnerFirstName;
var custdata = snapshot.val();
console.log(custdata);
console.log("FirstName:"+fn);
if (custdata.partnerFirstName === fn) {
console.log(custdata);
}
});
结果如下
{
createdAt: '2018-03-20T23:25:35.212Z',
partnerEmail: 'beard@yahoo.com',
partnerFirstName: 'name',
partnerGender: 'male',
partnerLastName: 'title',
partnerPhone: '444-602-4444',
profilePicture: 'assets/profile_icon.png',
uid: 'x99wl8kkmJSENpNdVMXTXCh7amy2' }
FirstName: name
{ '-L84iSPyr9bPvnJZ6BgV':
{
createdAt: '2018-03-20T23:25:35.212Z',
partnerEmail: 'beard@yahoo.com',
partnerFirstName: 'name',
partnerGender: 'male',
partnerLastName: 'title',
partnerPhone: '444-602-4444',
profilePicture: 'assets/profile_icon.png',
uid: 'x99wl8kkmJSENpNdVMXTXCh7amy2' } }
FirstName: undefined
如何获取子数据和密钥?要获取密钥,请尝试以下操作:
var ref = firebase.database().ref("customer").orderByChild("partnerFirstName").equalTo(fname);
ref.once("value").then(function(snapshot) {
snapshot.forEach(function(child){
var key = child.key;
var partnerName=child.val().partnerFirstName;
});
});
在上面,您在
customer
的子项中迭代,然后使用var key=child.key检索密钥代码>您应该将代码替换为
customer.orderByChild("partnerFirstName").equalTo(fname).on('value',
function (snapshot) {
var snap = snapshot.val();
var key = Object.keys(snap);
var custdata = snap[key];
var fn = snap[key].partnerFirstName;
if (custdata.partnerFirstName === fn) {
console.log(custdata);
}
});
返回密钥和子项感谢大家。我成功地解决了这段代码的问题。我的主要动机是使用上述代码通过firebase cloud函数获取json格式。它工作正常。我成功地在url中搜索了firstname和lastname,并获取了相应的记录
exports.getCustomerbyname2 = functions.https.onRequest((req, res) => {
res.header('Content-Type', 'application/json');
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type');
if (req.method === 'OPTIONS') {
res.status(204).send('');
}
const fname = req.query.fname;
const lname = req.query.lname;
var customer=admin.database().ref().child('customer');
customer.on('child_added', function (snapshot) {
var fname1 = snapshot.val().partnerFirstName;
var lname1 = snapshot.val().partnerLastName;
customer.orderByChild('partnerFirstName').equalTo(fname).once('value', function(snapshot) {
var arr=[];
if (fname1 === fname && lname1===lname) {
arr.push(snapshot.val());
console.log(snapshot.val());
res.status(200).json({ customer: arr});
}else{
res.status(200).send('ERROR : ' + errorObject);
}
},function(errorObject){
console.log("The read failed: " + errorObject.code);
// res.status(200).send('ERROR : ' + errorObject);
});
});
});
它不会以完美的格式出现,因为我们必须以angular作为服务进行迭代,请参见第二个输出,我们需要json(键和值)格式的数据,但“FirstName”返回未定义。我们已经尝试了您的上述代码。请参见我们的第一个代码,在这种情况下,我们无法检索键。但我们可以检索值,但在第二种代码情况下,我们可以检索键和值,但无法检索名字。您如何无法检索答案中的键,当您迭代时,您将能够获得该pushid。然后,要获得partnerFirstName
,只需按照答案中的操作,即可访问子级。如果您想要FirstName
,根据您的问题,它似乎是customer
下的直接子项,并且是pushid的兄弟,那么dovar name=snapshot.val().FirstName代码>获取它。