【问题标题】:Swift Query Into Firebase Firestore Nested Array快速查询 Firebase Firestore 嵌套数组
【发布时间】:2018-05-23 08:22:19
【问题描述】:

我有想要在 tableView 中显示的嵌套数据。

我的数据结构是这样的......

/users
    /userid
         name: "John"
         age: 23
         /likedPosts
            0:post1
            1:post2

对于表格视图,我想显示这些帖子(它们有自己的数据集合)。

为了做到这一点,我需要...

1) 获取数组的计数和

2) 查询用户喜欢的帖子数组值,获取帖子内容。

我目前正在使用 getDocument 功能,无法弄清楚。

例如...

func getUserLikedPosts() {
    if let user = Auth.auth().currentUser {
        let userFS = Firestore.firestore().collection("users").document(user.uid)
        userFS.getDocument(completion: { (snapshot, error) in
            print(snapshot?)

        })
    }
}

这连嵌套数组都打印不出来?

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database google-cloud-firestore


    【解决方案1】:

    这样的事情应该可以工作:

    func getUserLikedPosts() {
    if let user = Auth.auth().currentUser {
        let userFS = Firestore.firestore().collection("users").document(user.uid).collection(“likedPosts”)
        userFS.getDocuments(completion: { (snapshot, error) in
            print(snapshot?)
    
        })
    }
    }
    

    使用 Firestore,您需要深入到您想要的实际节点,这与 Firebase 不同,您可以访问子快照。

    所以在与 OP 进行了快速讨论后,问题是用户没有 likePost 对象。

    访问数组(请注意我没有测试过这段代码,这是一个例子):

    If let doc = document, let array = doc[“likedPost] as NSArray {
    print(array)
    }
    

    【讨论】:

    • 这不是一个集合。它是文档中的一个数组。
    • 啊,我明白了。它会打印出其余的数据吗?
    • 不,它说零。如果我按照我的方式打印它 - 它会显示所有顶级数据......即姓名和年龄。但连标题“likedPosts”都不会打印出来
    • 真的很蠢,但是您是否检查过您尝试访问的用户是否在其层次结构中将 likePosts 作为对象?
    • 好收获!哈哈,所以对用户来说没有任何东西......但是我们打印的两种方式仍然没有......我发现如果我们这样做if let userInfo = document { print(userInfo.data()) }然后在控制台中显示为......<__NSArrayM 0x1c0c5f050>( faskdjfl, asdf ) - 胡言乱语是我快速发帖;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2018-10-16
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多