【问题标题】:Firestore filtering on both collection and his documents' subcollectionFirestore 对集合及其文档的子集合进行过滤
【发布时间】:2021-08-11 15:10:41
【问题描述】:

是否可以在 Google Firestore 中查询一个集合,然后根据子集合值对其进行过滤?

我的意思是我得到了这个数据结构:

/
| repo/
| - title: title,
| - journal: Nyt,
| | category/
| | - name: News

我尝试用这种方式查询(例如检索 Nyt 分类新闻的所有文章):

db.collection('repo')
  .where('journal', '==', 'Nyt')
  .collection('category')
  .where('name', '==', 'News')

但是'Query' object has no attribute 'collection'.

我也尝试以这种方式构造数据:

/
| repo/
| - title: title,
| - journal: Nyt,
| - category: [
| | - news: News,
| | - tech: Tech,

然后通过 db.col('repo')....where('category.news', '==', 'News') 查询,但不幸的是我还需要 order_by 其他字段,因此 Firestore 要求为 db 中的每个类别建立索引...

【问题讨论】:

    标签: python google-cloud-firestore


    【解决方案1】:

    这在 Firestore 中是不可能的。您一次只能过滤单个集合或子集合中的值。

    您可能需要考虑将journal 的值复制到每个category 子集合的文档中,以便您可以使用collection group query 仅对子集合执行复合查询。

    【讨论】:

    • 不幸的是,我必须复制的不仅仅是子集合中唯一的“journal”属性......
    • 听起来您需要重组您的集合以支持您想要执行的查询。鉴于 Firestore 支持大规模可扩展数据集的方式,您现在所拥有的根本行不通。
    猜你喜欢
    • 2021-08-12
    • 2019-11-01
    • 2021-07-27
    • 2020-01-22
    • 1970-01-01
    • 2021-01-08
    • 2021-03-10
    • 2020-04-16
    • 2020-08-25
    相关资源
    最近更新 更多