Firestore 对集合及其文档的子集合进行过滤
Posted
技术标签:
【中文标题】Firestore 对集合及其文档的子集合进行过滤【英文标题】:Firestore filtering on both collection and his documents' subcollection 【发布时间】: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 中的每个类别建立索引...
【问题讨论】:
【参考方案1】:这在 Firestore 中是不可能的。您一次只能过滤单个集合或子集合中的值。
您可能需要考虑将journal
的值复制到每个category
子集合的文档中,以便您可以使用collection group query 仅对子集合执行复合查询。
【讨论】:
不幸的是,我必须复制的不仅仅是子集合中唯一的“journal”属性...... 听起来您需要重组您的集合以支持您想要执行的查询。鉴于 Firestore 支持大规模可扩展数据集的方式,您现在所拥有的根本行不通。以上是关于Firestore 对集合及其文档的子集合进行过滤的主要内容,如果未能解决你的问题,请参考以下文章
Firestore 安全规则 - 允许基于其父文档数据读取子集合
Firestore:获取带有和不带有子集合数据的集合[重复]