返回顶部
首页 > 资讯 > 后端开发 > GO >使用文档 ID (__name__) 进行Where条件查询
  • 248
分享到

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

2024-04-04 23:04:30 248人浏览 独家记忆
摘要

大家好,我们又见面了啊~本文《使用文档 ID (__name__) 进行Where条件查询》的内容中将会涉及到等等。如果你正在学习golang相关知识,欢迎关注我,以后会给大家带来更多Go

大家好,我们又见面了啊~本文《使用文档 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条件查询》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注编程网公众号!

您可能感兴趣的文档:

--结束END--

本文标题: 使用文档 ID (__name__) 进行Where条件查询

本文链接: https://lsjlt.com/news/595635.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作