Firestore查询游标生成动态查询



在Firestore中,当我编写查询并像这样执行时,它工作正常

_query = query(collectionTestingRef, 
where('name','==', 'him') , 
limit(4));

但是当我在一些变量中进行查询,然后使用(需要,因为我需要运行循环并添加未知的where条件)时,它不起作用。

var _localWherequery = "where('name','==', 'him')" ; 
_query = query(collectionTestingRef, 
_localWherequery, 
limit(4));

我知道我不知道where子句的数量,我想只在Firestore中使用查询游标,我如何实现这个动态。

不能在_localWherequery变量的字符串中包装where子句条件。因为Firestore将无法将其解释为查询过滤器。

相反,你可以创建一个函数,它接受where子句的列表,并动态地构建一个Firestore查询。

这只是一个你可以随意修改的例子:

import { collection, getDocs, limit, query, where } from "firebase/firestore";
import { db } from "./config/firebase.js";
const ref = collection(db, "users");
const whereClause = where("name", "==", "him");
const queryLimits = limit(2);
const q = query(ref, whereClause, queryLimits);
const snaps = await getDocs(q);
snaps.docs.forEach(doc => console.log(doc.id, " --> ", doc.data()));

虽然您也可以使用一些不同的方法来创建自定义查询,但下面将介绍其中一个方法。让注意这样做将失去所有的推理,因为方法参数将变成any类型:

import { collection, getDocs, query, where } from "firebase/firestore";
import { db } from "./config/firebase.js";
function buildQuery(collectionRef, whereClauses) {
let q = query(
collectionRef,
...whereClauses.map((clause) =>
where(clause.field, clause.operator, clause.value)
)
);
return q;
}
const ref = collection(db, "users");
const whereClauses = [
{ field: "name", operator: "==", value: "him" },
{ field: "age", operator: ">=", value: 18 },
{ field: "gender", operator: "==", value: "male" },
];
const q = buildQuery(ref, whereClauses);
const snaps = await getDocs(q);
snaps.docs.forEach((doc) => console.log(doc.id, " --> ", doc.data()));

参考:在Cloud Firestore中执行简单和复合查询

相关内容

  • 没有找到相关文章

最新更新