Ios 如何从Swift 4.2上的地图(对象)云Firestore文档中获取数据?

Ios 如何从Swift 4.2上的地图(对象)云Firestore文档中获取数据?,ios,swift,google-cloud-firestore,Ios,Swift,Google Cloud Firestore,我正在使用Cloud Firestore作为iOS应用程序的数据库 当文档包含映射(对象类型)时,我想查询数据时遇到问题。我不能通过简单的查询访问映射(nameoid)的字段(比如:这里的firstName) 我的代码如下: let db = Firestore.firestore() db.collection("userDetails").getDocuments() { (querySnapshot, err) in if let err = err {

我正在使用Cloud Firestore作为iOS应用程序的数据库

当文档包含映射(对象类型)时,我想查询数据时遇到问题。我不能通过简单的查询访问映射(nameoid)的字段(比如:这里的firstName)

我的代码如下:

let db = Firestore.firestore()
    db.collection("userDetails").getDocuments() { (querySnapshot, err) in

        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                let results = document.data()
                let result2 = results.compactMap({$0})
                print("listedItems: \(document.documentID) => \(result2[0].value)") }}}
我在某个地方读到,为了能够访问map对象内的值,我需要展平map对象,但这并不能让我访问它们,我唯一能进入的是map内的一组值,因此它只显示它们的键和值,如:

{
firstName = "John";
middleName = "British";
middleName = "Citizen";
gender = "M";
DOB = "8 December 2000 at 00:00:00 UTC+11";
}

问题是如何使用查询访问“John”这样的单个值?

一种方法如下。另外,最好不要强制展开querySnapshot(如果查询不存在,您的应用程序将崩溃!)。希望这有帮助

let db = Firestore.firestore()
db.collection("userDetails").getDocuments() { (querySnapshot, err) in
    if let err = err {
        print("Error getting documents: \(err)")
    } else if let querySnapshot = querySnapshot {
        for document in querySnapshot.documents {
            let results = document.data()
            if let idData = results["nameOnID"] as? [String: Any] {
                let firstName = idData["firstName"] as? String ?? ""
                print(firstName)
            }
        }
    }
}