You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase多语言标签产品集合的数据设计与过滤查询咨询

问题背景

需求是列出/products集合的全部数据,同时支持按标签过滤产品;标签要支持多语言搜索,但得保持ID统一。目前设计的数据结构如下:

/tags
  -tag_id_1: {en: "red", de: "rot"}
  -tag_id_2: {en: "green", de: "grün"}
  -tag_id_3: {en: "blue", de: "blau"}

/products
  -PRODUCT_1
    -title: ""
    -description: ""
    -date: ""
    -tags: [tag_id_1,tag_id_2,tag_id_3] 
  -PRODUCT_2
    -title: ""
    -description: ""
    -date: ""
    -tags: [tag_id_3] 

有两个疑问:

  1. 是否需要在每个产品里复制标签翻译,拆分出tagIds数组和tags对象数组?
  2. 当前结构能不能获取包含tag_id_1、tag_id_2、tag_id_3的所有产品,并按date排序?

疑问1:不需要这么做

完全没必要在产品里存标签翻译,也不用拆分tagIds和tags对象数组,原因很简单:

  • 重复存储标签翻译会造成数据冗余,以后要是修改某个标签的翻译,得挨个更新所有关联产品的标签内容,维护成本极高,还容易出现数据不一致的问题。
  • 现有结构用tag_id关联标签已经足够:用户用多语言搜索时,先在/tags集合里根据当前语言(比如英文搜"red",德文搜"rot")找到对应的tag_id,再拿这个ID去/products里过滤产品,完全能满足多语言搜索+ID统一的需求。
  • 如果返回产品数据时需要附带标签的多语言文本,查完产品后批量去/tags里获取对应的标签数据就行,这种按需关联的方式比提前存死灵活多了,还能节省存储空间。

疑问2:完全可以实现

当前结构完全能完成你要的操作:

  • 过滤产品:直接在/products集合里查询tags数组包含指定tag_id的文档即可。比如要找包含任意一个目标标签的产品,用数组包含查询;要是要找同时包含所有目标标签的产品,根据你使用的存储系统(比如Firestore、MongoDB),调用对应的多条件数组查询语法就行。
  • 按date排序:在过滤查询的基础上,直接添加按date字段的排序规则(升序或降序),大部分数据库/文档存储系统都支持这种组合操作。

举个Firestore的示例,查找包含tag_id_1的产品并按date降序排序:

db.collection('products')
  .where('tags', 'array-contains', 'tag_id_1')
  .orderBy('date', 'desc')
  .get()

要是要找同时包含三个标签的产品,可使用array-contains-any(若系统支持)或者组合多个array-contains条件,具体语法看你用的工具,但核心逻辑是可行的。


内容的提问来源于stack exchange,提问作者1110

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:18:24