当前位置: 首页 > 知识库问答 >
问题:

如何在云FireStore中使用逻辑和on数组执行复合查询?

容磊
2023-03-14

我有一个集合,其文档具有数组属性members,其中包含用户ID。我需要找到成员为一对用户ID的文档,例如:

从复合查询的文档中,我可以看到如何创建,但我需要,因为我需要包含这两个用户ID的文档(这实际上是文档唯一的原因)。医生说

you can include at most one array-contains or array-contains-any clause in a compound query

因此,下面的代码不起作用(我测试了,它实际上返回了一个错误):

const conversation = await firebaseDb.collection(collectionName)
      .where('members', 'array-contains', userId)
      .where('members', 'array-contains', otherUserId)
      .get();
const conversation = await firebaseDb.collection(collectionName)
      .where('members', 'array-contains', [userId, otherUserId])
      .get();

但它什么也不返回。

是否可以对Firestore文档中的数组值执行逻辑

共有1个答案

司马越
2023-03-14

我能想到的最简单的解决方案是将这些ID存储到映射中,而不是存储到数组中。因此您的成员映射应该如下所示:

members
 |
 --- M1fB...szi1: true
 |
 --- wXam...69A2: true

现在,您可以简单地使用以下命令进行查询:

const conversation = await firebaseDb.collection(collectionName)
  .where('members.' + userId, '==', true)
  .where('members.' + otherUserId, '==', true)
  .get();

而这确实是一个And操作。

 类似资料:
  • 如何执行查询?示例: 给出字段为或的所有文档 提供所有文档,其中或字段

  • 我怎么能在最后运行一些逻辑,而不是收集。 我可以像 我如何在过滤后运行最后的逻辑。 谢谢,拉维

  • 当在云函数中与fire base-admin sdk一起使用时,fireste. ColltionGroup()方法会收到错误。是否可以在云函数中对fiRecovery进行集合组查询? 这是我尝试使用的fiRecovery查询方法:https://googleapis.dev/nodejs/firestore/latest/Firestore.html#collectionGroup 但fires

  • 我读了Dan McGrath对这个问题的回答,他说在Firestore中有以下代码行的等价物: 这一行在Firebase Realtime database中工作得很好,但我试图在云Firestore中找到等效的几天。有人能帮我吗? 提前感谢!

  • 问题内容: Iam使用 searchkick 库作为 Elasticsearch 客户进行产品搜索。 https://github.com/ankane/searchkick 可以创建“ OR”条件和“ AND”条件; AND操作 Product.search,其中:{价格:{lte:200},in_stock:true} 或操作 Product.search,其中:{或:[[{{in_stock

  • 云功能文档说 //使用Firebase管理SDK访问Firebase实时数据库。const admin=require('firebase-admin');管理初始化EAPP(); 我使用的是Cloud Firesta,而不是实时数据库。我如何访问它?