首页 > 解决方案 > 如何从 FireStore 查询数据?

问题描述

我尝试使用地图从 Firestore 查询数据。我的问题是我不能从火库中只得到一个字段。

下面的代码是我的数据模型的结构。

用户数据.swift

import Foundation
import FirebaseFirestore


struct UsersData {
    var BOOKS_Field:Int
    var NAME_FIELD:String
    var PHOTO_FIELD:String
    var USERLEVEL_FIELD:Int

    var dictionary:[String:Any] {
        return [
            "BOOKS_Field":BOOKS_Field,
            "NAME_FIELD":NAME_FIELD,
            "PHOTO_FIELD":PHOTO_FIELD,
            "USERLEVEL_FIELD":USERLEVEL_FIELD

        ]
    }
}


extension UsersData : DocumentSerializable {
    init?(dictionary: [String: Any]) {
        guard let BOOKS_Field = dictionary["BOOKS_Field"] as? Int,
            let NAME_FIELD = dictionary["NAME_FIELD"] as? String,
            let PHOTO_FIELD = dictionary["PHOTO_FIELD"] as? String,
            let USERLEVEL_FIELD = dictionary["USERLEVEL_FIELD"] as? Int
            else {return nil}
        self.init(BOOKS_Field: BOOKS_Field, NAME_FIELD: NAME_FIELD, PHOTO_FIELD:PHOTO_FIELD, USERLEVEL_FIELD:USERLEVEL_FIELD)
    }
}

这是我尝试从 Firestorm 服务器获取用户的地方。

func getLeadersfromServer() {
        let leaderRef = db.collection("USERS_Collection").order(by: "BOOKS_Field", descending: true).limit(to: 5)

        leaderRef.addSnapshotListener { (snapShot, error) in
            if let error = error {
                print(error)
            } else {
                for document in (snapShot?.documents)! {
                    let data = document.data()
                    let docs = (data.compactMap({_ in UsersData(dictionary: data)}))

                    let user1 = docs[0]

                    print(user1.NAME_FIELD)

                }
            }
        }
    }

您可以在下面找到打印输出结果:

Name1 H.
Name2 B.

我怎样才能通过订单只得到一个名字?

标签: swift

解决方案


推荐阅读