根据项目数组执行Chain中的方法

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

甚至不确定如何标题这个问题。提前道歉。

基本上,我有一系列检查项目,如下所示:

const checked_items = ['brand', 'frame_gender', 'sku'...];

我想查询firebase数据集,如下所示:

db.collection('glasses')
  // .where('brand' , '==' , 'brand')
  // .where('frame_gender' , '==' , 'Male')
  // .where('sku' , 'array-contains' , 'sku-here')
  .get()
  .then( (snapshot) => ... 

根据我的项目数组链接这些方法的最有效方法是什么?有小费吗?如果不清楚,我可以进一步澄清。

谢谢

javascript firebase google-cloud-firestore
2个回答
1
投票

也许这样的事情会有所帮助:

const filter = [
    { key: 'brand', op: '==', value: 'brand' },
    { key: 'frame_gender', op: '==', value: 'Male' },
    { key: 'sku', op: 'array-contains', value: 'sku-here' },
];
//...
const filteredQuery = filter
  .filter(item=>item.value!==undefined)
  .reduce(
    (query,{key,op,value})=>query.where(key,op,value),
    query
  );

您可以使用过滤器项的值属性(或者它的索引,而不是将复选框分配给checked_items,以便您知道在选中/取消选中时要设置的值)


2
投票

您需要知道要查询的字段的名称以及要过滤的值。在您共享的代码中,您只显示名称,但在我的回答中,我假设您还有一个值列表。

const checked_items = ['brand', 'frame_gender', 'sku'];
const checked_values = ['brand', 'Male', 'sku_here'];

现在,您可以遍历字段名称,并为每个名称创建一个新查询。

var query = db.collection('glasses');
checked_items.forEach(function(field, index) {
    var value = checked_values[index]);
    query = query.where(field, "==", value);
});
query.get().then(...
© www.soinside.com 2019 - 2024. All rights reserved.