【问题标题】:How to query a field inside an array from Firestore如何从 Firestore 查询数组内的字段
【发布时间】:2021-04-15 13:27:50
【问题描述】:

我的项目中有一个集合,我试图仅将相关文档提取到我的项目中。

我的 Firestore 看起来像这样:

我试图只获取包含登录用户的项目。 我只想获取用户数组中的一个 UID 与当前用户 UID 匹配的那些。

如何过滤查询以仅获取 SwiftUI 中的查询?

这是我获取项目的 ProjectRepository:

class ProjectRepository: ObservableObject
{
    var userId = ""
    
    private let fbAuth = FBAuth()
    
    private var cancellables: Set<AnyCancellable> = []
    
    private let store = Firestore.firestore()
    
    @Published var projects: [Project] = []
    
    init()
    {
        fbAuth.$user
            .compactMap { user in
                user?.uid
            }
            .assign(to: \.userId, on: self)
            .store(in: &cancellables)
        
        fbAuth.$user
            .receive(on: DispatchQueue.main)
            .sink { [weak self] _ in
                self?.get()
            }
            .store(in: &cancellables)
    }
    
    // Retrieve projects from firebase
    func get()
    {
        store.collection(FirestoreKeys.CollectionPath.projects)
            .addSnapshotListener { querySnapshot, error in
                
                if let error = error {
                    print("Error getting projects: \(error.localizedDescription)")
                    return
                }
                
                self.projects = querySnapshot?.documents.compactMap{ document in
                    try? document.data(as: Project.self)
                } ?? []
            }
    }
    
    // Add projects to firebase
    func add(_ project: Project)
    {
        do {
            _ = try store.collection(FirestoreKeys.CollectionPath.projects).addDocument(from: project)
        } catch {
            fatalError("Unable to add card: \(error.localizedDescription)")
        }
    }
}

【问题讨论】:

    标签: swift firebase google-cloud-firestore


    【解决方案1】:

    根据这个支持文档Querying and filtering data,可以简单写

    let capitalCities = db.collection("cities").whereField("capital", isEqualTo: true)
    

    过滤您的数据

    【讨论】:

    • 是的,但是在我的情况下,我想在用户数组的索引中获取 uid 字段。在这里,我必须获取一个位于数组索引内的字段,该数组位于集合内的文档内。在这种情况下我不知道该怎么做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 2021-11-12
    相关资源
    最近更新 更多