在 Swift 中从 Firestore 中获取文档列表

Posted

技术标签:

【中文标题】在 Swift 中从 Firestore 中获取文档列表【英文标题】:Fetching List of Documents from Firestore in Swift 【发布时间】:2021-07-26 04:00:12 【问题描述】:

我有一个文档 ID 列表,我想在我的 swift 项目中提取这些文档。出于某种原因,没有返回任何内容。

示例文档:

示例模型:

struct MyModel: Identifiable, Codable, Hashable 

@DocumentID var id: String? = UUID().uuidString
var title: String
var content: String

示例代码:

self.db
    .collection("examplePath")
    .whereField("id", in: ["1D9815E9-54D4-468E-BH23-791D2AE82DA8", "8D9815E9-54D4-468E-BH23-791D2AE82DA8"])
    .addSnapshotListener  querySnapshot, error in
        guard let documents = querySnapshot?.documents else 
            print("no documents \(String(describing: error))")
            return
        
        print(documents.compactMap  (queryDocumentSnapshot) -> MyModel? in
            return try? queryDocumentSnapshot.data(as: MyModel.self))
        
    

【问题讨论】:

【参考方案1】:

要将in 运算符与文档ID 一起使用,您可以使用FieldPath.documentID()

self.db
    .collection("examplePath")
    .whereField(FieldPath.documentID(), in: ["1D9815E9-54D4-468E-BH23-791D2AE82DA8", "8D9815E9-54D4-468E-BH23-791D2AE82DA8"])

【讨论】:

谢谢。当我尝试这个时,Xcode 告诉我:'Type 'Firestore' has no member 'FieldPath'' @neo 你可以试试FieldPath.documentID() 吗? Xcode 接受了这一点,但我仍然没有得到任何东西。我什至尝试过: .whereField(FieldPath.documentID(), isEqualTo: "1D9815E9-54D4-468E-BH23-791D2AE82DA8") - 但我没有得到任何回报。当我删除 whereField 时,所有项目都正确返回。我已经复制并粘贴了 Firestore 中显示的 ID,但没有任何帮助 另一件事可能会有所帮助:当我输出没有 whereField 的结果时,我将其作为对 docID 的引用:[MyApp.MyModel(_id: FirebaseFirestoreSwift.DocumentID (值:可选(“1D9815E9-54D4-468E-BH23-791D2AE82DA8”) 好的,我明白了。我已经使用了这个查询并且它有效: .whereField(FieldPath.documentID(), in: [Optional("1D9815E9-54D4-468E-BH23-791D2AE82DA8"), Optional("8D9815E9-54D4-468E-BH23-791D2AE82DA8") )])

以上是关于在 Swift 中从 Firestore 中获取文档列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在flutter中从云Firestore中获取数据?

无法在 SwiftUI 按钮视图中从 Cloud Firestore 获取数据

在 Firebase 函数中从 Firestore 获取数据时遇到问题

Swift - Firebase 在 Firestore 中获取 Facebook 好友 UID

如何在 Flutter 中从 Firebase Auth 获取用户 ID?

Swift - 从随机创建的文档 ID 中获取字段(Firestore)