typescript - 基于参数的firestore查询中的条件where子句
问题描述
例如,我的产品列表有动态过滤器列表,从该过滤器列表将 https 请求发送到云功能。然后尝试从该请求中设置多个条件 where 子句
多个条件 where 子句在本地 firebase 应用程序中有效,但在云函数内部无效 -- 更新代码 --
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
import { Query } from "@google-cloud/firestore"; // update code
const cors = require("cors")({
origin: true
});
admin.initializeApp();
const settings = { timestampsInSnapshots: true };
admin.firestore().settings(settings);
const database = admin.firestore();
export const getProduct = functions.https.onRequest(
(request, response) => {
return cors(request, response, async () => {
try {
let productRef = database.collection("product") as Query; // update code
if(request.query.brand){
productRef =productRef.where("brand", "==", request.query.brand)
}
if(request.query.lifeStyle){
productRef =productRef.where("lifeStyle", "==", request.query.lifeStyle)
}
const productsQuery = await productRef.get();
const products = productsQuery.docs.map(
docRef => ({
id: docRef.id,
...docRef.data()
})
);
response.status(200).send(products);
} catch (error) {
response.status(500).send(error);
}
});
}
);
编译后控制台上显示错误 [ts] 类型“查询”不可分配给类型“集合引用”。[2322]
解决方案
TypeScript 抱怨您正在尝试更改productRef
. 您首先将productRef
调用结果分配给collection()
. 从链接的 API 文档中,您可以看到它返回一个CollectionReference类型的对象。然后,您尝试使用 toproductRef
的调用结果重新分配where()
,这将返回不同类型的Query。TypeScript 不希望您更改变量的类型。
由于 CollectionReference 是 Query 的子类,因此您可以直接告诉 TypeScript 您想一直productRef
作为 Query 处理:
let productRef = database.collection("product") as Query
请注意此处对 Query 的强制转换。
推荐阅读
- javascript - HTML 幻灯片有效,但无法控制哪些图像循环
- ios - 具有 func 和返回数据的 Firestore 类
- python - 如何打印列表中变量的最后一个元素?
- jenkins - 防止 Jenkins 多分支管道触发新分支的构建
- sql - SQL Server、ADO.NET 和 LINQ-to-SQL 中查询的性能比较
- sql - 在 sqlite3 中创建具有复合属性/列的表
- android - 如何删除 LinkedHashMap 中的重复键
- node.js - request-promise `.catch` 抛出错误
- php - 从对象数组中提取特定数据
- tensorflow - 如何查看模型随时间而不是时期的进度?