我已经花了6个小时来解决这个问题,但仍然无法解决这个问题。我正在尝试通过Firestore按订单状态查询订单。但是由于某种原因,当我在其中添加.where时,该功能不起作用。我已经尝试过查询其他字段,但也不行。
exports.getOrderHistory = (req, res) => {
return db
.collection('orders')
.where('orderStatus', '==', "Active") //this line doesnt work
.orderBy('createdAt', 'desc')
.get()
.then((data) =>{
let orders =[];
data.forEach((doc)=>{
orders.push(doc.data()
);
})
return res.json(orders)
})
.catch((err) =>{
console.error(err)
res.status(500).json({error:err.code})
})
}
但是,我已经使用它来从“用户”集合中获取身份验证令牌,并且可以正常工作。
let idToken;
if (
req.headers.authorization &&
req.headers.authorization.startsWith("Bearer ")
) {
idToken = req.headers.authorization.split("Bearer ")[1];
} else {
console.error("No token found");
return res.status(403).json({ error: "Unauthorised" });
}
admin
.auth()
.verifyIdToken(idToken)
.then(decodedToken => {
req.user = decodedToken;
return db
.collection("users")
.where("userId", "==", req.user.uid) // it works fine here
.limit(1)
.get();
})
.then(data => {
req.user.handle = data.docs[0].data().handle;
return next();
})
.catch(err => {
console.err("Error while verifying token", err);
return res.status(403).json(err);
});
};
答案 0 :(得分:0)
来自文档
orderBy()子句还过滤给定字段的存在。的 结果集将不包含不包含给定文档的文档 字段。
您的按字段排序是否可能为空?
答案是在reddit上交叉发布的,可以在此处找到
答案 1 :(得分:0)
确保您的规则与您的查询相匹配。换句话说,如果您要添加“where”,您也必须在规则中提及它。我知道这是一个老问题,但我只是为了以防万一,它可能会帮助其他人。