Firestore显示属性,在webshop中有一个函数



这对我来说很难解释,所以我希望你能理解。并事先感谢你试图理解我的目标。

我对Firestore完全陌生,我坐了几个小时阅读文档,最后甚至没有工作。最后,我在YouTube上找到了一个来自Firestore的视频,它让我走上了正确的道路。

简单地说,我正在创建一个网上商店与x数量的产品,我想存储在一个firestore数据库,信息如价格,sku,只是一个标识符,很容易找到正确的产品,如果我想读取数据。

我的目标是能够简单地从我的HTML文件中运行一个函数,让我们说getData(price[sku]);它将运行函数,查找带有sku的产品的价格。(我没有这方面的经验,所以我在这里可能会偏离我的目标)

我当前的代码是这样的:

async function getData(data) {
const q = query(collection(db, 'products'));
const qsnap = await getDocs(q);
qsnap.forEach((doc) => {
console.log(doc.id, " => ", doc.data() + `.` + data);
});
}
getData(price);

你可能会看到我想在这里做什么。我在加上"price"。当我运行getData(price);我希望它只是在doc.data()的末尾添加。price。Price,但这不起作用。我也不知道如何让它查找每个产品的SKU。

控制台只返回x-product =>(对象对象).price如果我从代码中删除+ `.` + data,当我不寻找特定属性时,它会返回{sku: 'd80cb795', id: 'd80cb795-945d-4f3f-a875-c04a380bb59a', price: 250}

将来我还想实现一个购物车系统,它使用SKU向购物车中添加东西,但这对我来说太高级了,我可能永远不会实现。我只是希望这些信息足以让我的目标被理解。我想学习如何做到这一点。基本上没有关于这个特定的东西的文档。

所以如果可以的话,请不要给我填鸭,如果我打错了请给我批评。它帮助我学习。

我可以看到您正试图从集合中获取所有文档('产品')。如果您想通过SKU搜索它们,则需要首先拥有SKU,这可以通过从扫描仪或使用产品id的先前查询中获取SKU来完成,在这种情况下,我将简单地使用产品id来代替查询,但这取决于您。这就是如何从一个集合中获取应用于特定案例的多个文档:

async function getData(inputSKU) {
const q = query(collection(db, 'products'), where("sku", "==", inputSKU));

const qsnap = await getDocs(q);
qsnap.forEach((doc) => {
console.log(doc.id, "=>", doc.data())
});
}
getData(inputSKU);

如果您只想获得具有唯一id/SKU的文档,或者如果您只想获得每个产品的单个文档,那么最好的选择是这样的:

const docRef = doc(db, 'products', 'inputSKU');
const docSnap = await getDoc(docRef);
// and optionally...
if (docSnap.exists()) {
console.log("Product data:", docSnap.data());
} else {
// doc.data() will be undefined in this case
console.log("No such product");
}

当您添加+ '.' + data时,将其添加为价格参数是没有意义的,如果您想将数据添加到文档中,或者换句话说,更新文档而不覆盖整个文档,请使用update()方法:

const productRef = doc() const productRef = doc(db, "product", inputSKU);
// Set the "price" to the amount you want
await updateDoc(productRef, {
price: anyPrice
});

您可以在单独的函数中使用它,也可以将其添加到用于查询产品的函数中。

在未来,如果你想创建一个购物车,它将会像创建一个文档或集合一样简单,这取决于你选择的所有你想购买的产品id/sku的结构,就像你之前创建一个产品集合一样。

相关内容

最新更新