【问题标题】:How to update fields in Firestore map如何更新 Firestore 地图中的字段
【发布时间】:2019-06-09 12:13:55
【问题描述】:

不知道如何使用变量而不是硬编码的字段名称将新字段添加到 Firestore 中的地图中。

我在 firestorm 中有一个数据结构。该集合称为 webQuiz,文档称为 '12345。数据结构如下:

    roomName: Demo0
    roomNumber: 46532
    people:{11111:"David, 22222:"Peter}

请注意,人是地图数据对象。

我想在人员地图中添加另一个字段。下面的代码有效,但数据看起来不像 people:{11111:"David, 22222:"Peter, 44444:"Cathy"} 看起来像 people:{11111:"David, 22222:"Peter, x:"Cathy"}

在这种情况下如何使用包含字段名称的变量? x 应该是一个变量,但它实际上是作为一个属性来获取的。

    function testing(){

      var x = "44444"
      var y = "Cathy"

      var cityRef = db.collection('webQuiz').doc('12345');

    var setWithMerge = cityRef.set({
      people: {x: y}
    }, { merge: true });

我希望 firestorm 的输出是 people:{11111:"David, 22222:"Peter, 44444:"Cathy"} 但此刻的实际输出是 人:{11111:"David, 22222:"Peter, x:"Cathy"}

谢谢

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    您需要使用完整的字段路径作为更新的键:

    var setWithMerge = cityRef.set({
      `people.${x}`: y
    });
    

    这将防止重写整个“人员”字段,因为您正在指定要直接更改地图的哪个属性。

    注意字段名和属性名用句点隔开。

    【讨论】:

    • 我实际上找到了另一个同样有效的解决方案。 function testing(){ var cityRef = db.collection('webBuzzer').doc('12345');变量 x = "55555"; var y = "卢克"; var updateObj = { 人:{} }; updateObj.people[x] = y; var setWithMerge = cityRef.set(updateObj, { merge: true });无论如何 - 非常感谢您的帮助。
    • 我不确定这是否是因为我使用的是打字稿,但这会引发异常。当我执行[`people.${x}`]: y 时,它不会引发异常,但它会在该字符串的文档中创建一个字段,而不是更新一个字段。
    猜你喜欢
    • 2021-07-20
    • 2019-07-15
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2019-06-05
    相关资源
    最近更新 更多