【问题标题】:Firestore sort collection by field in referenceFirestore 按引用中的字段对集合进行排序
【发布时间】:2021-07-27 21:44:44
【问题描述】:

我有一个包含帖子的集合,这些帖子是包含时间戳和其他数据的文档,我们可以将其称为全局帖子对象。 每当用户发布内容时,就会将一个与该帖子 id 相同 id 的文档添加到用户的私有帖子集合中(在users/userUuid/posts/postId 下),我们称之为私有帖子对象。 每个私有 post 对象都包含对全局 post 对象的引用(作为引用对象存储在文档中)。 这是结构:

posts: [
    "post1" : {
        timestamp: 12000000000
        data: "abc"
        
    }
    "post2" = {
        timestamp: 12000000000
        data: "abc"
        
    }
]

users: [
    "user1" : {

        posts: [
            "post1": {
                ref: reference to post1
            }
        ]
    }
] 

我有一个屏幕,我在其中查询用户私人帖子集合下的所有对象。是否可以根据它们引用的文档的时间戳值对它们进行排序?

【问题讨论】:

  • 您正在尝试根据帖子收集时间戳对用户收集的帖子进行单独排序?对吗?
  • @JMGelilio 是的,完全正确,所以我想用来对文档进行排序的功能是文档中的时间戳,它只是在我尝试排序的文档中引用。

标签: google-cloud-firestore


【解决方案1】:

是否可以根据它们引用的文档的时间戳值对它们进行排序?

您似乎正在尝试将来自 Cloud/Firebase Firestore 中两个集合的两个数据连接起来,如果有 join 查询,这会更快但是 Firestore 有 no @ 987654327@ 查询。仍然有一些方法,但他们的做法不同,大多数情况下他们执行多个读取操作,存储在数组变量中并对其进行排序或使用collection group query。它仍然取决于您的代码以及您将如何处理数据,其中一些问题已经在 Stack Overflow 的多个问题中进行了解释(例如12)。

我建议您更改 Firestore 数据结构会更容易。例如,将值为 userid(例如 users1)的字段(例如 author)添加到 posts 集合,这样每个帖子都有一个所有者。对作者字段使用where 子句,对时间戳字段使用orderBy 子句对其进行排序descasc

结构:

posts: [

    "post1" : {
    
        timestamp: 12000000000
        data: "abc"
        author: "user1"

    }
    
    "post2" = {
    
        timestamp: 12000000000
        data: "abc"
        author: "user1"
        
    }
    
]

【讨论】:

    猜你喜欢
    • 2019-09-26
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 2022-06-28
    相关资源
    最近更新 更多