【发布时间】:2021-04-15 09:15:55
【问题描述】:
我得到了这个用于从我的数据库中过滤数据的 firestore 查询,但我的 min max 没有过滤掉我的最高价格。我不明白为什么。
else 功能不起作用
但是当我在else if 语句中测试查询时,min max 可以正常工作。
我的 GET 请求正文:
{
"pageNumber": 1,
"seller": "",
"name": "shirt",
"category": "Shirts",
"min": 0,
"max": 120,
"rating": [ 3, 4 ],
"order": "lowest"
}
我的代码:
const { admin, db } = require("../util/admin");
const config = require("../util/config");
const firebase = require("firebase");
const { data } = require("../data");
//get all products
let latestDoc = null;
exports.getAllProducts = (req, res) => {
const limit = 4;
const page = Number(req.body.pageNumber) || 1;
const name = req.body.name || "";
const category = req.body.category || "";
const order = req.body.order || "";
const min =
req.body.min && Number(req.body.min) !== 0 ? Number(req.body.min) : 0;
const max =
req.body.max && Number(req.body.max) !== 0 ? Number(req.body.max) : 1000000;
const rating = req.body.rating[0];
const sortOrder =
order === "lowest" ? "asc" : order === "highest" ? "desc" : "asc";
const orderType =
order === "newest"
? "createdAt"
: order === "toprated"
? "rating"
: "price";
console.log(min);
console.log(max);
if (category === "" && rating === 0 && name === "") {
console.log("geen filter");
db.collection("products")
.orderBy(orderType, sortOrder)
.startAfter(latestDoc || 0)
.limit(limit)
.startAt(min)
.endAt(max)
.get()
.then((doc) => {
const sendData = doc.docs.map((data) => data.data());
latestDoc = doc.docs[doc.docs.length - 1];
res.send(sendData);
});
} else if (category === "" && rating > 0 && name === "") {
console.log("products");
db.collection("products")
.where("rating", ">=", rating)
.orderBy("rating")
.startAfter(latestDoc || 0)
.limit(limit)
.startAt(min)
.endAt(max)
.get()
.then((doc) => {
const sendData = doc.docs.map((data) => data.data());
latestDoc = doc.docs[doc.docs.length - 1];
res.send(sendData);
});
} else if (category !== "" && rating === 0 && name === "") {
console.log("category");
db.collection("products")
.where("category", "==", category)
.orderBy(orderType, sortOrder)
.startAfter(latestDoc || 0)
.limit(limit)
.startAt(min)
.endAt(max)
.get()
.then((doc) => {
const sendData = doc.docs.map((data) => data.data());
latestDoc = doc.docs[doc.docs.length - 1];
res.send(sendData);
});
} else if (name !== "" && category === "" && rating === 0) {
console.log("naam");
db.collection("products")
.where("searchName", "array-contains", name)
.orderBy("price")
.startAfter(latestDoc || 0)
.limit(limit)
.startAt(min)
.endAt(max)
.get()
.then((doc) => {
const sendData = doc.docs.map((data) => data.data());
latestDoc = doc.docs[doc.docs.length - 1];
res.send(sendData);
});
} else {
console.log("else");
db.collection("products")
.where("searchName", "array-contains", name)
.where("rating", ">=", rating)
.orderBy("rating")
.where("category", "==", category)
.orderBy(orderType, sortOrder)
.startAfter(latestDoc || 0)
.limit(limit)
.startAt(min)
.endAt(max)
.get()
.then((doc) => {
const sendData = doc.docs.map((data) => data.data());
latestDoc = doc.docs[doc.docs.length - 1];
res.send(sendData);
});
}
};
【问题讨论】:
-
这个问题有三个单独的查询。哪个不工作?
-
嘿,谢谢。它是 else 语句中的查询,所以如果您在我的代码中向下滚动,则为最后一个
标签: javascript node.js firebase google-cloud-firestore