Javascript Firebase、orderByChild未排序

Javascript Firebase、orderByChild未排序,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在尝试使用orderByChild对快照进行排序,但此功能不起作用 FIREBASE规则: "rules": { "community": { "users": { ".read": true, "$uid": { ".read": true, ".write": "$uid === auth.uid", ".indexOn": ["pseudo", "pseudoLower", "pseudoInverse

我正在尝试使用orderByChild对快照进行排序,但此功能不起作用

FIREBASE规则:

"rules": {
  "community": {
    "users": {
      ".read": true,
      "$uid": {
        ".read": true,
        ".write": "$uid === auth.uid",
        ".indexOn": ["pseudo", "pseudoLower", "pseudoInverseLower", "films"]
      }
    }
  }
}
数据:

"community" : {
  "users" : {
    "Ab" : {
      "films" : 200,
      "filters" : 2,
      "id" : "Ab",
      "pseudoBase" : "AB",
      "pseudoInverseLower" : "zy",
      "pseudoLower" : "ab"
    },
    "Bc" : {
      "films" : 692,
      "filters" : 4,
      "id" : "Bc",
      "pseudoBase" : "King",
      "pseudoInverseLower" : "prmt",
      "pseudoLower" : "king"
    },
    "Ce" : {
      "films" : 100,
      "filters" : 5,
      "id" : "a",
      "pseudoBase" : "A",
      "pseudoInverseLower" : "z",
      "pseudoLower" : "a"
    }
  }
}
JS:

在用户数据中,您将检索他的伪长度(以及相反的长度)、他的胶片长度和过滤器长度

我尝试了
orderByChild('pseudoLower')
.orderByChild('films')
.orderByChild('pseudoInverseLower')
,但没有改变


我真的被困在这一点上。。。可能我忘了什么?

您需要将生成的快照转换为子项数组–这可以使用snapshot
forEach
方法完成,这将按照查询中提供的子项顺序迭代子项。如果打印快照值,用户将丢失接收到的顺序

async function getCommunityUsers(filter) {

    const usersRef = admin.database().ref('community/users')
    const snapshot = await usersRef.orderByChild(filter).once('value')

    let users = []

    snapshot.forEach(child => {
        users.push({
            key: child.key,
            ...child.val()
        })
        return false
    })

    return users
}

当你说它不起作用时,我不知道你的意思。您是否可以更新您的问题,以包括您期望发生的事情和正在发生的事情?似乎只有在使用子事件类型时,
orderByChild
才起作用。@Callam:不是这样的
orderByChild
适用于您选择收听的任何事件类型。嘿,Josselin。您共享的代码尚未对
快照执行任何操作。所以很难说到底出了什么问题。也就是说,根据过去的经验,我认为你们并没有维持秩序。如果是这样,Callam的答案就是你的解决方案。
async function getCommunityUsers(filter) {

    const usersRef = admin.database().ref('community/users')
    const snapshot = await usersRef.orderByChild(filter).once('value')

    let users = []

    snapshot.forEach(child => {
        users.push({
            key: child.key,
            ...child.val()
        })
        return false
    })

    return users
}