【问题标题】:How to Filter firestore collection by multiple ids如何按多个 id 过滤 firestore 集合
【发布时间】:2019-01-06 22:05:37
【问题描述】:

所以在我的数据库架构中我有这样的东西

/collections/users/userId1 { 
   ...,
   id,
   relatedContracts: [id1, id2, id3]
}

/collections/contracts/contractId {
   ...,
   id,
}

在我的 firebase 安全规则中,我有这个

    match /contracts/{contract} {
       function isOwnContract() {
           return request.auth.id == resource.data.creatorId || request.auth.id == recipientId
       }
       allow read, write: if isOwnContract()
     }

现在我对如何过滤客户端以仅获取我的相关合同感到非常困惑。如果引入了安全规则我就不能再在客户端做我的过滤了。

我知道这是存在的

firestore.collection(CONTRACTS).where(id, "==", contractId)

但是如何根据多个 id 进行过滤

【问题讨论】:

    标签: firebase google-cloud-firestore firebase-security


    【解决方案1】:

    你目前can't fetch multiple ids per query on the client,所以你的选择是:

    1. 迭代用户文档中的每个合同 ID,并分别获取每个文档(这并不像您想象的那么糟糕)
    2. 在每个合同中维护另一个关系,其中包含将其作为关系的用户列表。然后在合同集合中搜索该列表中的用户 ID。

    【讨论】:

    • 对于第一个选项,它不是因为 firebase 在内部批处理请求那么糟糕吗?
    • 我假设即使您使用firebase.firestore.batch() 对请求进行批量处理,每个查询都算作一个文档读取。
    • 另外,get 请求不能使用firebase.firestore.batch()进行批处理
    猜你喜欢
    • 2020-09-23
    • 2019-01-12
    • 1970-01-01
    • 2019-02-09
    • 2012-03-13
    • 2016-12-20
    • 2019-01-22
    • 2019-06-07
    • 2021-01-15
    相关资源
    最近更新 更多