在Firebase中,我有一个“用户”节点,其中每个用户都有存储在其UID下的值(名称,头像等):

"users" : {
    "eMKRoygZUJZ9VFMHzzO15tnrtYf2" : {
      "gender" : "female",
      "handle" : "sav",
      "name" : "Savina",
      "profilePicture" : "https://graph.facebook.com/*removed*/picture?type=large&return_ssl_resources=1",
    }

现在我需要获取一组特定用户的信息 - 我有一个我想要获取数据的所有用户的UID数组( returnedParticipants ) . 目前,下面的函数返回应用程序中所有用户的值 - 我想知道如何过滤此请求,因此我只查询其UID位于 returnedParticipants 数组中的用户,因此我可以根据某些字典设置它们的值:

var returnedParticipants = [String]()

// [UID : value]
var avatarDictionary: [String : AnyObject] = [:] 
var nameDictionary: [String : AnyObject] = [:]
var genderDictionary: [String : AnyObject] = [:]

func getParticipantInfo() {

    // Participant UIDs
    guard let participantUIDs = self.returnedParticipants as? [String] else {print("Could not get room's participants"); return}
    let databaseRef = FIRDatabase.database().reference()

    // Query Firebase users with those UIDs & grab their gender, profilePicture, handle, and name
    databaseRef.child("users").observeSingleEvent(of: .value, with: { (snapshot) in

        if let snapDict = snapshot.value as? [String:AnyObject]{

            for each in snapDict {

                let keys  = each.key
                let avatars = each.value["profilePicture"] as! String
                let genders = each.value["gender"] as! String
                let handles = each.value["handle"] as! String
                let names = each.value["name"] as! String

                print("\n\nUID: \(keys)")
                print("Avatar: \(avatars)")
                print("Gender: \(genders)")
                print("Handle: \(handles)")
                print("Name: \(names)")
            }
        }
    }, withCancel: {(Err) in
        print(Err.localizedDescription)
    })

    // Set those to the dictionaries [UID : value]


}

我搜索并在SO:Use Firebase-query to get data from an array of ID's上看到了这个问题,但我查看了这个文档的页面:https://firebase.google.com/docs/database/ios/lists-of-data并且找不到关于对键列表执行查询的任何信息 .

我可以使用 queryOrdered(byChild: *someUID*) ,如果我想一次搜索一个特定的UID,但这将涉及多次调用Firebase .

是否有一种有效的方法可以在一个调用/一个函数中完成所有操作,而不是为每个UID单独进行观察?也许从数组或UID使用 queryEqualToValue 或queryStarting / Ending at value的方法?

完整的DB结构:

{
"rooms" : {
    "-Ki6fAHv6LS5pyx34nUr" : {
      "messages" : {
        "-Ki70oJOAsto1uIxJsLY" : {
          "senderId" : "tzfHgGKWLEPzPU9GvkO4XE1QKy53",
          "senderName" : "Timothy",
          "text" : "Test"
        }
      },
      "participants" : {
        "tzfHgGKWLEPzPU9GvkO4XE1QKy53" : true
      },
      "roomName" : "Room One"
    },
    "-Ki6fDsTUTdNAw8elnP9" : {
      "participants" : {
        "tzfHgGKWLEPzPU9GvkO4XE1QKy53" : true
      },
      "roomName" : "Room Two"
    },
    "-KiBBeexijDJri_w7fye" : {
      "participants" : {
        "eMKRoygZUJZ9VFMHzzO15tnrtYf2" : true
      },
      "roomName" : "Room Three"
    }
  },
"users" : {
   "eMKRoygZUJZ9VFMHzzO15tnrtYf2" : {
      "gender" : "female",
      "handle" : "sav",
      "name" : "Savina",
      "profilePicture" : "https://graph.facebook.com/1929991317219760/picture?type=large&return_ssl_resources=1"
    },
    "tzfHgGKWLEPzPU9GvkO4XE1QKy53" : {
      "gender" : "male",
      "handle" : "TestHandleOne",
      "name" : "Timothy",
      "profilePicture" : "https://graph.facebook.com/1682119565138679/picture?type=large&return_ssl_resources=1"
    }
    }
}