【问题标题】:Update Object values inside a document in firestore更新 Firestore 中文档内的对象值
【发布时间】:2020-05-14 10:59:04
【问题描述】:

我想更新文档中的对象。

正如您在上图中的 TransactionMap 下看到的那样,Deposit 对象在那里,而在 Deposit 内部,一个对象与键值对存在。所以我想继续在 Deposit 对象字段中添加对象。现在当我尝试更新它时发生了什么,它被新的取代,它没有得到更新。 这是代码:

const transactionMapDocRef = db
        .collection("users")
        .doc(paymentData.notes[0])
        .collection("Transactions")
        .doc(currentDate);
      try {
        const doc = await transactionMapDocRef.get();
        if (!doc.exists) {
          console.log("No such document!");
          transactionMapDocRef.set({
            TransactionMap: {
              Deposit: {
                [paymentData.notes[1]]: data,
              },
            },
          });
          console.log("Successfully saved");
          return res.status(200).json({ message: "Successfully saved" });
        } else {
          transactionMapDocRef.update({
            TransactionMap: {
              Deposit: {
                [paymentData.notes[1]]: data,
              },
            },
          });
          console.log("Successfully Updated");
          return res.status(200).json({ message: "Successfully Updated" });
        }
      } catch (err) {
        console.log("Error getting document", err);
        return res.status(500).json({
          message: "Something went wrong!",
        });
      }

请帮忙。谢谢你

【问题讨论】:

    标签: javascript node.js firebase google-cloud-firestore


    【解决方案1】:

    而不是这个:

              transactionMapDocRef.set({
                TransactionMap: {
                  Deposit: {
                    [paymentData.notes[1]]: data,
                  },
                },
              });
    

    它会替换整个文档,您需要使用 update() 以及 Firstore 的点符号来指示您要更改的特定字段值。

              transactionMapDocRef.update({
                [`TransactionMap.Deposit.${paymentData.notes[1]}`]: data
              });
    

    【讨论】:

    • 它不工作。如果“TransactionMap”对象不存在,set 方法工作正常,但如果存在,我想在“Deposit”中添加多个对象,但每次旧的对象都会被“Deposit”对象中的新对象替换。 @道格史蒂文森
    • 我曾经这样使用过:- transactionMapDocRef.update({ "TransactionMap.Deposit": { [paymentData.notes[1]]: data, }, });但它仍然无法正常工作。并且您建议它显示语法错误。
    • 您必须确定要更新的项目的完整路径,并将其作为您传递的对象的键。您不能对要更新的对象进行任何嵌套。
    • 在“存款”对象内(在图片中提到)我不能添加多个对象。这就是你想说的??
    • 不,我是说您需要使用 Firestore 提供的点表示法构建要更新的字段的路径。这将是一个单一的字符串键。
    猜你喜欢
    • 2020-12-27
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    相关资源
    最近更新 更多