【问题标题】:Firestore array-contains-any object based on one of two fieldsFirestore 数组包含基于两个字段之一的任何对象
【发布时间】:2020-12-22 11:26:22
【问题描述】:

我的文档中有以下数组:

我有 SizeFilterComponent,它在大小选择更改时发出 BaseFilter 对象。我可以选择多种尺寸。 这是处理逻辑的方法:

selectionChange($event){
    let array = [];
    for(let el of $event){
      array.push({size: el})
    }
    let filter: BaseFilter = {
      field: 'sizes',
      symbol: FilterSymbol.arany,
      value: array
    } 
    this.filterChanged.emit(filter);
  }

但问题是尺寸有计数字段。这是字段的数字大于或等于零。 我想过滤尺寸大于 0 的项目。我该怎么做?

当我将线路改为 array.push({size: el, size: 10}) 我在屏幕截图上获取项目。但我想得到类似array.push({size: el, size: >0}) 的东西(它只是图形,我知道语法很糟糕)

【问题讨论】:

    标签: javascript angular firebase google-cloud-firestore nosql


    【解决方案1】:

    我不确定我是否理解正确,但如果您的目标是获取数组中任何项目的计数 > 0 的任何文档,那么这是不可能的。原因是 array-containsarray-contains-any 仅在您匹配传入的整个/确切项目时才有效,这对于您的查询是不可能的。

    我会推荐:

    • 将计数存储在地图字段中,例如sizes.M.count。虽然在您无法预测商品数量时通常不建议这样做,但在这里应该没问题,因为尺寸的数量是有限的而且不是很高。
    • 为每个数组元素添加一个 isInStock 字段,然后在更新该大小的 count 时更新该字段。

    我会选择第一个选项,但 tat 涉及一些个人偏好。

    【讨论】:

    • 您的意思是sizes: Map<string, string>[];,其中键是大小,值是计数?
    猜你喜欢
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多