Javascript Firestore,应用基于位置的动态筛选
我试图根据不同的标准(如烹饪、口味、饮食等)筛选一系列产品/菜肴 我将这些过滤器作为json对象传递,如下所示:Javascript Firestore,应用基于位置的动态筛选,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我试图根据不同的标准(如烹饪、口味、饮食等)筛选一系列产品/菜肴 我将这些过滤器作为json对象传递,如下所示: { "tagDiet": [ "halal", "vegan" ], "tagCuisine": [ "Other" ], "price": [9.99] } 现在,我想将这些过滤器传递到过滤集合的fireba
{
"tagDiet": [
"halal",
"vegan"
],
"tagCuisine": [
"Other"
],
"price": [9.99]
}
现在,我想将这些过滤器传递到过滤集合的firebase functions端点,该端点的代码包含我要修复的代码段:
const filters: any = request.body;
let query: any = productsRef;
console.log(filters)
let data: Array < any > = [];
if (filters.hasOwnProperty('price')) {
let price = filters.price;
delete filters['price'];
let maxPrice = Math.max(price);
console.log(maxPrice, price, filters);
query = await query.where('price', '<=', maxPrice);
}
await Object.keys(filters).map(async (key: string) => {
console.log(key, filters[key]);
query = await query.where(key, 'IN', filters[key]);
})
const过滤器:any=request.body;
let query:any=productsRef;
console.log(过滤器)
let数据:数组=[];
if(filters.hasOwnProperty('price')){
让价格=过滤器价格;
删除过滤器[‘价格’];
设maxPrice=Math.max(price);
log(maxPrice、price、过滤器);
query=等待查询。其中('price','在此行中使用大写字母:
query = await query.where(key, 'IN', filters[key]);
应该是
query = query.where(key, 'in', filters[key]);
请注意,我已经删除了wait
关键字:where()
不是异步方法,因此您不需要使用wait
。另一方面,您确实需要将wait
与异步get()
方法一起使用
与await Object.keys(filters).map(async(key:string)=>{..})相同;
:此处无需使用async/await
。对Renaud的注释进行一点扩展:.where()
返回一个完全在本地的新查询-它实际上根本不访问Firestore-这就是为什么它是一个同步操作,不需要wait
现在就有意义了,谢谢
query = await query.where(key, 'IN', filters[key]);
query = query.where(key, 'in', filters[key]);