在 Firestore 中提交时处理具有产品变体的库存跟踪的数据结构

Data structure when submitting in Firestore that handles tracking of inventories with product variations

每件产品可能有不同的尺码,每个都有不同的颜色和数量。

示例:

我提交的方式以及控制台中显示的内容:

代码: Link: https://codesandbox.io/s/form-order-working-4f6g2

Firestore:

Firestore 无法更新索引数组中的现有元素。它仅支持两种方法,arrayUnion() 添加元素和 arrayRemove() 从数组中删除元素,如 documentation.

中所述

作为替代方案,您可以从文档中读取整个数组,在内存中对其进行修改,然后完全更新修改后的数组字段。这是一个容易出错且乏味的过程。您可以查看此 article 以了解更多信息。

我不确定你的用例,但看起来你可以通过使用映射(嵌套对象)而不是数组来使你的数据库结构更适合。像这样 -

通过执行此操作,您可以通过提到的点符号更新嵌套对象 here。一些更新文档的示例将如下所示 -

async function updateData(color) {
 const docRef = doc(db, 'collectionId', 'documentId');
 await updateDoc(docRef,{
   [`colorStockList.${color}`]:300
 });
}

更新

要自动更新库存,您可以实现一个在下订单时调用的方法。在该方法中,您可以使用 here 中描述的 increment() 方法。 increment() 方法可以根据您提供的值增加或减少库存。例如,如果有人下了 3 件衬衫的订单,您可以将该数字传递给 increment() 方法,以便它可以将库存减少该值。当你想减少库存时,请确保使用 -ve 符号。

该方法应如下所示 -

async function updateData(color,value) {
  const docRef = doc(db, 'collectionId', 'documentId');
 await updateDoc(docRef,{
   [`colorStockList.${color}`]:increment(-value)
 });
}