在firestore中进行条件筛选

问题描述 投票:0回答:1

我有过滤商品的问题。

有可能以某种方式更美妙地解决这种情况吗?

在这里,通过添加一个参数,代码量增加了阶乘,所以我看到这样一个可怕的解决方案=)

let query = firebase.firestore().collection('products').orderBy('price')
// TODO: How I can rewrite it?

if (payload.category && payload.size && payload.color) {
  query = query
    .where('category', '==', payload.category)
    .where('color', '==', payload.color)
    .where('size', '==', payload.size)
} else if (payload.size && payload.color) {
  query = query
    .where('color', '==', payload.color)
    .where('size', '==', payload.size)
} else if (payload.category && payload.color) {
  query = query
    .where('category', '==', payload.category)
    .where('color', '==', payload.color)
} else if (payload.size && payload.category) {
  query = query
    .where('category', '==', payload.category)
    .where('size', '==', payload.size)
} else if (payload.size) {
  query = query
    .where('size', '==', payload.size)
} else if (payload.category) {
  query = query
    .where('category', '==', payload.category)
} else if (payload.color) {
  query = query
    .where('color', '==', payload.color)
}

query.get() ...
javascript google-cloud-firestore
1个回答
2
投票

摆脱巨大的if / else结构,只需为每个需要添加query

let query = firebase.firestore().collection('products').orderBy('price')

if (payload.size) {
  query = query.where('size', '==', payload.size)
} 

if (payload.category) {
  query = query.where('category', '==', payload.category)
} 

if (payload.color) {
  query = query.where('color', '==', payload.color)
}
© www.soinside.com 2019 - 2024. All rights reserved.