【问题标题】:Firestore: search for keywords in multiple documentsFirestore:在多个文档中搜索关键字
【发布时间】:2020-10-11 04:49:54
【问题描述】:

我正在使用 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 过滤/搜索来做到这一点?

【问题讨论】:

    标签: database firebase google-cloud-firestore


    【解决方案1】:

    按照您现在的数据结构方式,包含要搜索的值的多个字段数组元素,不可能让单个查询找到您想要的所有内容。这里的问题是数组。根本不可能搜索数组字段的嵌套内容。

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

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

    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 是您要查找的单词。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-23
      • 2011-09-14
      • 2018-08-31
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      相关资源
      最近更新 更多