如何通过多个 id 过滤 Firestore 集合

Rob*_*esz 5 firebase firebase-security google-cloud-firestore

所以在我的数据库模式中,我有这样的东西

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

/collections/contracts/contractId {
   ...,
   id,
}
Run Code Online (Sandbox Code Playgroud)

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

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

现在我对如何过滤客户端以仅获取我的相关合同感到非常困惑。如果引入了安全规则,我将无法再对客户端进行过滤。

我知道这存在

firestore.collection(CONTRACTS).where(id, "==", contractId)
Run Code Online (Sandbox Code Playgroud)

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

Dou*_*son 1

目前,您无法在客户端上为每个查询获取多个 id,因此您的选择是:

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