如何在Cloud Firestore中对数组进行逻辑AND的复合查询?

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

enter image description here

From 文献 对于复合查询,我可以看到如何做一个 OR但我需要一个 AND因为我需要包含以下内容的文档 两者 用户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();

但什么也没返回

实际上,是否可以执行一个逻辑的 AND 关于Firestore doc中的数组值?

解决方案:

我能想到的最简单的解决方案是将这些ID存储到Map中,而不是数组中。所以你的 members 地图应该是这样的。

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

现在你可以简单地使用查询。

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

而这确实是一个AND操作。

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何有效地链住RxJS的可观察项?

2022-9-9 0:00:16

未分类

我如何从用户那里读取多行的元组输入?

2022-9-9 0:00:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索