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);
});