【问题标题】:Trying to subtract from data in firebase firestore试图从firebase firestore中的数据中减去
【发布时间】:2021-01-08 13:58:58
【问题描述】:

我正在开发一个销售点系统,这是界面;

我使用 Firebase Firestore 作为数据库。 当要出售的物品被选择并支付后,它被发送到数据库。我正在尝试从 firestore 数据库的库存数据中的项目总数中减去所选项目的数量。

这是 firestore 数据库,突出显示的是我要从中减去的项目的总量;

到目前为止,我尝试使用 for 循环迭代结帐数据数组中的每个项目以获取项目 ID 和数量。然后使用来自 firestore 的商品 ID(之前从结帐数据中获取)获取每件商品并从总数量中减去。

这是for循环的代码;


 for (let item in checkoutData) {

            let itemId = checkoutData[item].id;
            var checkoutQty = checkoutData[item].quantity;

            db.collection("inventories").where("productNumber", "==", itemId).get()
                .then(function (querySnapshot) {
                    querySnapshot.forEach(function (doc) {
                        var inventoryQty = parseInt(doc.data().productQuanity);

                        var sub = inventoryQty - checkoutQty;

                        console.log(`Subtract inventory qty from checkout qty for item ${doc.data().productNumber} = ${sub}`);

                    });
                })
                .catch(function (error) {
                    console.log("Error getting documents: ", error);
                });
        }

但是当我运行这个函数时,结果是它从 firestore 数据库的库存表中的数据中减去结帐数据中最后一项的数量。

这是结果;

在上图中,突出显示的是结帐数据数组中最后一项的数量,用于减去错误的其余部分。

我想要实现的是,使用它们的唯一项目 ID 从 firestore 数据库中的库存数据中的项目中减去结帐数据数组中的每个项目。

【问题讨论】:

  • 如果我理解正确,您想在您的 Firestore 数据库中减去一个数量并且它没有被正确反映?
  • 是的,它没有正确减去。

标签: javascript html firebase google-cloud-firestore


【解决方案1】:

您没有将更改保存到 Firestore,当您检索数据并减去它时,您必须将记录保存回来才能将其保留在 Firestore 中。您可以使用set 来做到这一点,如下所示:

for (let item in checkoutData) {

        let itemId = checkoutData[item].id;
        var checkoutQty = checkoutData[item].quantity;

        db.collection("inventories").where("productNumber", "==", itemId).get()
          .then(function (querySnapshot) {
            querySnapshot.forEach(function (doc) {
              var inventoryQty = parseInt(doc.data().productQuanity);
              var sub = inventoryQty - checkoutQty;
              try {
                //set the quantity of the item
                let setInventoryQty = await db.collection("inventories").doc(doc.id).set({
                  productQuanity: sub,
                }, { merge: true });
              } catch (error) {
                console.log("Error while trying to set the quantity")
              }
              console.log(`Subtract inventory qty from checkout qty for item ${doc.data().productNumber} = ${sub}`);

            });
          })
          .catch(function (error) {
            console.log("Error getting documents: ", error);
          });
      }

请注意,我使用的是merge: true,所以它只会覆盖特定字段

【讨论】:

    猜你喜欢
    • 2018-12-24
    • 2023-04-04
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多