假设我在Firestore中有一个集合,其中包含以下格式的对象:
{
/* ... */
ownerId: "id-1",
memberIds: [
"id-2",
"id-3",
"id-4"
]
}
如何查询Firestore中所有在ownerId
字段或memberIds
字段中存在字符串id-1
的文档?
我只找到了AND查询,就像这样:
return collection('whatever')
.where('memberIds', 'array-contains', 'id-1')
.where('ownerId', '==', 'id-1');
但是这些只会返回id-1
包含在ownerId
字段和memberIds
数组中的文档。
我知道我可以执行多个查询并连接结果,但这会使分页和排序变得太麻烦。
2条答案
按热度按时间wj8zmpe11#
在Firestore中不可能执行您所描述的OR查询。
一种解决方案是将数据反规范化(NoSQL世界中非常常见的方法),并向文档添加一个额外的字段,该字段“连接”其他两个字段,如下所示:
然后,您可以轻松地使用
当然,它需要你保持这个数组与其他字段对齐,但这并不难。当你更新两个“主”字段之一时,你可以从你的前端完成它,或者通过一个云函数,它在对文档的任何更改时被触发。
sr4lhrrt2#
Firestore现在支持OR查询(预览版)。您可以从Firebase JS SDK
v9.18.0
使用它。