Firestore:在多个文档中搜索关键字

时间:2020-06-21 07:17:11

标签: database firebase google-cloud-firestore

我正在使用Firestore存储多个实体的数据。在此示例中,每个文档都是一家公司,其中包含其销售产品的详细信息,并且每个产品都与多个关键字相关联。示例结构:

文档1:

    company_name: 'Company 1',
    products: [
        {
            name: 'Green tea',
            keywords: ['green tea', 'healthy, 'matcha']
        },
        {
            name: 'Sushi',
            keywords: ['sushi', 'rice', 'healthy']
        }
    ]

文档2:

    company_name: 'Company 2',
    products: [
        {
            name: 'Apple',
            keywords: ['fruit', 'healthy']
        },
        {
            name: 'Cake',
            keywords: ['dessert', 'sweet']
        }
    ]

我想搜索出售带有某些关键字的产品的公司。例如,通过搜索关键字healthy,将同时返回文档Company 1Company 2,因为它们都使用该关键字出售食品。我该如何通过Firestore过滤/搜索来做到这一点?

1 个答案:

答案 0 :(得分:2)

现在,您的数据结构化了,因为多个字段数组元素包含要搜索的值,所以不可能有一个查询就可以找到您想要的所有内容。这里的问题是数组。根本不可能搜索数组字段的嵌套内容。

当数组元素需要分别与查询匹配时,它们应改为集合中的单个文档。是的,更多的读写操作,但这也意味着您的查询成为可能。

想象一下,如果您的两个文档没有包含product数组字段,而是每个文档包含一个名为product的子集合,其中每个项目都有一个称为关键字的字段。

companies (collection)
  document 1 (doc)
    company_name: string field
    products (subcollection)
      keywords: string array field

这样,您就可以像这样(在JavaScript中)跨所有公司的所有产品进行集合组查询:

db.collectionGroup("products").where("keywords", "array-contains", keyword)

其中keyword是您要查找的单词。