我目前正在使用Firebase,特别是第一次使用Firestore,我遇到了一个错误,阻止了我的进度。我有一个文档有2个嵌套集合,我试图通过它们进行查询,并按降序排列。然后使用Firestore快照功能,我试图Map文档并捕获任何更改。我知道Firebase的语法已经改变,当我在本地主机上运行代码时,我得到了这个错误:
无效的文档引用。文档引用必须具有偶数个段,但users/JAVTmLaWdWOTpXH 5iPw 25 E2 CF 7z 2/orders具有3个段。
我在调试时尝试了不同的方法,比如为“用户”和“订单”创建两个不同的文档,但没有成功。下面我将附上代码,一直给我这些错误,我想知道如果有人会知道如何正确使用新的Firestore语法。如有任何帮助或建议,我们将不胜感激。
import React, { useEffect, useState } from "react";
import "./Orders.css";
import { useStateValue } from "./StateProvider";
import { db } from "./firebase";
import { doc, onSnapshot, orderBy, query, setDoc } from "firebase/firestore";
import Order from "./Order";
function Orders() {
const [{ basket, user }, dispatch] = useStateValue();
const [orders, setOrders] = useState([]);
useEffect(() => {
if (user) {
const orderRef = doc(db, "users", user?.uid, "orders");
const q = query(orderRef, orderBy("created", "desc"));
onSnapshot(q, (snapshot) => {
setOrders(
snapshot.docs.map((doc) => ({
id: doc.id,
data: doc.data(),
}))
);
});
} else {
setOrders([]);
}
}, [user]);
return (
<div className="orders">
<h1>Your Orders</h1>
<div className="orders__order">
{orders?.map((order) => (
<Order order={order} />
))}
</div>
</div>
);
}
export default Orders;
我尝试为“users”创建一个文档,然后添加到该文档中,以便在该文档中包含名为“orders”的集合。
预期的结果是,我收到没有错误,并可以正确的顺序降序。
1条答案
按热度按时间cngwdvgl1#
代码中的错误来自这一行:
这一行中的路径(
users/JAVTmLaWdWOTpXH5iPw25E2CF7z2/orders
)指向一个集合,而不是该集合中的特定文档。因此,要创建对该集合的引用,需要使用用途:我有一个文档有2个嵌套集合,我试图通过它们查询.
Firestore一次只能查询一个集合,或者使用一个特定名称跨所有集合查询。目前不支持在多个具有不同名称的集合之间进行查询。