登录
首页 >  Golang >  Go问答

使用文档 ID (__name__) 进行Where条件查询

来源:stackoverflow

时间:2024-03-27 18:33:28 396浏览 收藏

大家好,我们又见面了啊~本文《使用文档 ID (__name__) 进行Where条件查询》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我使用 firebase 使用单调递增的可按字母顺序排序的 id(即 rfc3339 格式的日期)将文档插入到集合中。这可以帮助我查询最旧的文档,并在达到一定数量时将其删除。

所以我的文档 id 看起来像这些字符串:

  • “2021-05-21t18:00:00z”
  • “2021-05-21t21:00:00z”
  • “2021-05-21t22:00:00z”

我正在使用 cloud.google.com/go/firestore go 库来检索 id 小于 (<) 特定值的文档(然后我计划在批量操作中删除这些文档,例如删除超过 30 天的文档)。

但是,go 包没有为我的查询返回任何结果(至少在 firebase 模拟器上):

    iter := u.DB.Collection("users").Doc(uid).Collection("orders").
        Where(firestore.DocumentID, "<", "2020-04-23T02:00:00Z").Documents(ctx)

    // iter comes back empty.

我无法判断这是否是产品的限制(例如 __name__ 不支持使用 <> 进行查询),或者是否是 firebase 模拟器的缺点/未实现的行为。

这个问题可能应该是关于为什么这行不通——但是如果有人有关于以轮流方式在集合中保留最大 n 条记录的建议(比如带有上限的 fifo 队列),我有兴趣听到这个这就是我尝试使用此查询的原因。


正确答案


其他因素: __name__ 并没有像你想象的那样做。参见Firestore collection group query on documentId。它实际上是包含 documentId 的完整路径,并且必须如此匹配。

顺便说一句,不鼓励使用这种有序的 documentID - 它会影响数据库性能。您将在读取和写入时遇到争用和冲突。将这些值放入文档中的字段中,然后使用随机 Id(例如由 .doc() 创建的)作为文档 Id。这样您就可以对数据进行搜索、排序、限制以及任何您想要的操作。实际上没有充分的理由为文档使用有序的常规 ID。

今天关于《使用文档 ID (__name__) 进行Where条件查询》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>