如果我知道一个字段的值,如何获取FireStore文档的ID?(以Swift格式)

如果我知道一个字段的值,如何获取FireStore文档的ID?(以Swift格式),swift,google-cloud-firestore,Swift,Google Cloud Firestore,我正在用Swift编程,我有一个小问题 我想知道如果我有文档中某个字段的值,如何获取文档的ID 小例子: document_x -> name: x, number: 5 document_y -> name: y, number: 2 document_z -> name: z, number 16 现在我知道我需要文档的ID,它的名称是:z(在本例中为documentz) 这可能吗?几个月前我也遇到了同样的问题。fire base正在生成随机文档id,因为没有提供特定

我正在用Swift编程,我有一个小问题

我想知道如果我有文档中某个字段的值,如何获取文档的ID

小例子:

document_x -> name: x, number: 5

document_y -> name: y, number: 2

document_z -> name: z, number 16
现在我知道我需要文档的ID,它的名称是:z(在本例中为documentz)


这可能吗?

几个月前我也遇到了同样的问题。fire base正在生成随机文档id,因为没有提供特定id。 这有两种方法: 第一个:这是我如何找到我的文档id w.r.t的字符串,我已经在它

    private func GetFireBaseID(_ ComingToBeDel : String , completion:@escaping(String) -> ()) {
        db.collection(FireBaseConstant.ProjectCollectioName).getDocuments() { (querySnapshot, err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                for document in querySnapshot!.documents {
                    let currentdata = document.data()
                    if let currenttitle  = currentdata[FireBaseConstant.ProjectVC.ProjectName] as? String {
                        if currenttitle == ComingToBeDel {
                            completion(document.documentID)
                            break
                            
                        }else {
                            completion("")
                        }
                    }
                }
            }
        }
    }
打电话的人是这样的

            GetFireBaseID(filterobj[index].ProjectTitle) { (returnid) in
                if returnid.count > 0 {
                    db.collection(FireBaseConstant.ProjectCollectioName).document(returnid).updateData([
                        FireBaseConstant.ProjectVC.ProjectName : string
                    ])
                }else {
                    print("couldnt find your file")
                }
            }
第二种方法可以使用whereField筛选查询。有关此方法,请参阅以下链接。

要在字段中查找与特定值匹配的文档,您可以。大概是这样的:

let query = collectionRef.whereField("name", isEqualTo: "z")
query.getDocuments() { (querySnapshot, err) in
    if let err = err {
        print("Error getting documents: \(err)")
    } else {
        for document in querySnapshot!.documents {
            print("\(document.documentID) => \(document.data())")
        }
    }
}

顺便说一句:我正在使用SwiftIt,这是Firebase的一个大问题。一种常见的解决方案是将文档ID作为字段实际存储在文档中!!因此,每当您创建一个新文档(例如,添加一个用户)时,您实际上会获得文档id并将其作为一个字段添加到其中,可能名为“thisDocId”!