首页 > 解决方案 > Firebase Firestore - 如何查询两个匹配的“WHERE”子句中的任何一个

问题描述

我正在开发一项search功能,我当前的代码适用于使用name_lower我的 firestore 文档中的字段进行搜索。

假设我的收藏中有此文档:

{
  name_lower: 'burnik',
  keywords: ['gago', 'sira']
}
const searchArr = searchParams.split(' ');

const snap = await productsRef
        .where('name_lower', 'in', searchArr)
        .limit(12)  
        .get();

但是如果我还想查询keywords我的文档中的匹配项,我该如何查询

这是无效的,因为我已将 ainarray-contains-anyfilter 组合在一起,如错误所示。

const snap = await productsRef
        .where('name_lower', 'in', searchArr)
        .where('keywords', 'array-contains-any', searchArr) // <------- invalid  
        .limit(12)
        .get();

我想到了一个可能的解决方案,即对匹配的关键字进行另一个查询,然后过滤并组合它们。

const matchedNameSnap = await productsRef
        .where('name_lower', 'in', searchArr)
        .limit(12)  
        .get();

const matchedKeySnap = const snap = await productsRef
        .where('keywords', 'array-contains-any', searchArr)
        .limit(12)  
        .get();

// ... map and filter matchedKeySnap and matchedNameSnap

Firebase 中是否有“OR”语句,或者至少是如何查询 WHERE 子句的更好解决方法?

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


推荐阅读