甚至不确定如何标题这个问题。提前道歉。
基本上,我有一系列检查项目,如下所示:
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) => ...
根据我的项目数组链接这些方法的最有效方法是什么?有小费吗?如果不清楚,我可以进一步澄清。
谢谢
也许这样的事情会有所帮助:
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
,以便您知道在选中/取消选中时要设置的值)
您需要知道要查询的字段的名称以及要过滤的值。在您共享的代码中,您只显示名称,但在我的回答中,我假设您还有一个值列表。
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(...