Typescript Firebase orderByChild-检索嵌套对象
我使用的是实时数据库,其结构如下:Typescript Firebase orderByChild-检索嵌套对象,typescript,firebase,firebase-realtime-database,Typescript,Firebase,Firebase Realtime Database,我使用的是实时数据库,其结构如下: { "users": { "1234": { "name": "Joe", "externalId": "384738473847", }, "5678": { ... }, "5555": { ... } } }
{
"users": {
"1234": {
"name": "Joe",
"externalId": "384738473847",
},
"5678": { ... },
"5555": { ... }
}
}
现在我想通过externalId
访问用户,我使用以下方法访问此对象:
const snapshot = await admin.database().ref(`/users/`).orderByChild('externalId').equalTo(`${someId}`).once('value')
这将返回以下信息:
{
"1234": {
“name”:Joe,
“externalId:”384738473847"
}
}
我现在想访问对象(包含名称
和外部id
),而不知道id(即1234)
我目前有以下解决方案:
const rootValue = Object.keys(userSnapshot.val())[0]
const user = userSnapshot.val()[rootValue]
这是可行的,但我认为这不是最好的方法。是否有更好的方法访问对象?对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也将包含一个结果列表 代码需要处理列表,最好的方法是使用内置的
快照。forEach
操作:
const snapshot = await admin.database().ref(`/users/`).orderByChild('externalId').equalTo(`${someId}`).once('value')
snapshot.forEach((userSnapshot) => {
console.log(userSnapshot.key);
console.log(userSnapshot.val());
console.log(userSnapshot.val().name, userSnapshot.val().externalId);
});